## Engine
Class StatLog

source: C:\XIII\Engine\Classes\StatLog.uc

    Core.Object
       |
       +--Engine.Actor
          |
          +--Engine.Info
             |
             +--Engine.StatLog

Direct Known Subclasses:StatLogFile

class StatLog
extends Engine.Info

    //=============================================================================
    // Logs game events for stat collection
    //
    // ngLog, ngStats, and ngWorldStats are registered trademarks of
    // NetGames USA, Inc. at http://www.netgamesusa.com All rights reserved. A
    // ny and all occurrences of code related to supporting their products and
    // services appears with their express permission.
    //=============================================================================

Variables
`int` | `Context`
`string` | `DecoderRingURL` URL to log format decoder ring.
`string` | `GameCreator` Name of game creator.
`string` | `GameCreatorURL` URL to info on game creator.
`string` | `GameName` Name of this game.
`string` | `LocalBatcherParams` Batcher command line parameters.
`string` | `LocalBatcherURL` Batcher URL.
`StatLog` | `LocalLog` used by world log when also logging to local log
`string` | `LocalLogDir` URL to world stats information.
`string` | `LocalStandard` The standard this log is compliant to.
`string` | `LocalStatsURL` URL to local stats information.
`string` | `LogInfoURL` URL to info on logging standard.
`string` | `LogVersion` Version of the log standard.
`string` | `WorldBatcherParams` Batcher command line parameters.
`string` | `WorldBatcherURL` Batcher URL.
`string` | `WorldLogDir` URL to world stats information.
`string` | `WorldStandard` The standard this log is compliant to.
`string` | `WorldStatsURL` URL to world stats information.
`bool` | `bBatchLocal` An error occured last time we tried to process stats.
`bool` | `bWorld`
`bool` | `bWorldBatcherError` An error occured last time we tried to process stats.

Function Summary
`void` | `BatchLocal()`
`void` | `BeginPlay()`
    // Object
`void` | `BrowseRelativeLocalURL(string URL)`
`void` | `Destroyed()`
`void` | `ExecuteLocalLogBatcher()`
    // Batching
`void` | `ExecuteSilentLogBatcher()`
`void` | `ExecuteWorldLogBatcher()`
`void` | `FlushLog()`
`void` | `GenerateLogs(bool bLogLocal, bool bLogWorld)`
`string` | `GetAbsoluteTime()`
    // Return absolute time.
`string` | `GetGMTRef()`
    // Time
`string` | `GetMapFileName()`
`void` | `GetPlayerChecksum(PlayerController P, out string)`
`string` | `GetShortAbsoluteTime()`
    // A less verbose version...
`string` | `GetTimeStamp()`
    // Return a timestamp relative to last absolute time.
`void` | `InitialCheck(GameInfo Game)`
    // Special
`void` | `LogEventString(string EventString)`
`void` | `LogGameEnd(string Reason)`
`void` | `LogGameStart()`
`void` | `LogItemActivate(Inventory Item, Pawn Other)`
`void` | `LogItemDeactivate(Inventory Item, Pawn Other)`
`void` | `LogMapParameters()`
`void` | `LogMutator(Mutator M)`
`void` | `LogNameChange(Controller Other)`
`void` | `LogPickup(Pickup Item, Pawn Other)`
`void` | `LogPings()`
`void` | `LogPlayerConnect(Controller Player, optional string)`
`void` | `LogPlayerDisconnect(Controller Player)`
`void` | `LogPlayerInfo(Controller Player)`
`void` | `LogServerInfo()`
`void` | `LogSpecialEvent(string EventType, optional coerce, optional coerce, optional coerce, optional coerce)`
`void` | `LogStandardInfo()`
    // Standard Log Entries
`void` | `LogTeamChange(Controller Other)`
`void` | `LogTypingEvent(bool bTyping, Controller Other)`
`void` | `LogWorldEventString(string EventString)`
`void` | `StartLog()`
    // Logging
`void` | `StopLog()`
`void` | `Tick(float Delta)`
    // Track relative timestamps.
`void` | `Timer()`

Source Code

    00001	//=============================================================================
    00002	// Logs game events for stat collection
    00003	//
    00004	// ngLog, ngStats, and ngWorldStats are registered trademarks of
    00005	// NetGames USA, Inc. at http://www.netgamesusa.com All rights reserved. A
    00006	// ny and all occurrences of code related to supporting their products and
    00007	// services appears with their express permission.
    00008	//=============================================================================
    00009	class StatLog extends Info
    00010		native;
    00011
    00012	// Internal
    00013	var int		Context;
    00014
    00015	// State
    00016	var bool	bWorld;
    00017
    00018	// Time
    00019	var	float	TimeStamp;
    00020
    00021	// Log Variables
    00022	var() string LocalStandard;		// The standard this log is compliant to.
    00023	var() string WorldStandard;		// The standard this log is compliant to.
    00024	var() string LogVersion;		// Version of the log standard.
    00025	var() string LogInfoURL;		// URL to info on logging standard.
    00026	var() string GameName;			// Name of this game.
    00027	var() string GameCreator;		// Name of game creator.
    00028	var() string GameCreatorURL;	// URL to info on game creator.
    00029	var() string DecoderRingURL;	// URL to log format decoder ring.
    00030
    00031	var() globalconfig string	    LocalBatcherURL;		// Batcher URL.
    00032	var() globalconfig string	    LocalBatcherParams;		// Batcher command line parameters.
    00033	var() globalconfig string	    LocalStatsURL;			// URL to local stats information.
    00034	var() globalconfig string	    WorldBatcherURL;		// Batcher URL.
    00035	var() globalconfig string	    WorldBatcherParams;		// Batcher command line parameters.
    00036	var() globalconfig string	    WorldStatsURL;			// URL to world stats information.
    00037	var() globalconfig string		LocalLogDir;
    00038	var() globalconfig string		WorldLogDir;
    00039
    00040	var globalconfig bool			bWorldBatcherError;		// An error occured last time we tried to process stats.
    00041	var globalconfig bool			bBatchLocal;
    00042
    00043	var StatLog LocalLog;	// used by world log when also logging to local log
    00044
    00045	// Object
    00046	function BeginPlay()
    00047	{
    00048		SetTimer(30.0, True);
    00049	}
    00050
    00051	function Destroyed()
    00052	{
    00053		if ( LocalLog != None )
    00054			LocalLog.Destroy();
    00055	}
    00056
    00057	function Timer()
    00058	{
    00059		LogPings();
    00060	}
    00061
    00062	function GenerateLogs(bool bLogLocal, bool bLogWorld )
    00063	{
    00064		if ( bLogWorld )
    00065		{
    00066			bWorld = true;
    00067			if ( bLogLocal )
    00068				LocalLog = spawn(class);
    00069		}
    00070	}
    00071
    00072	// Logging
    00073	function StartLog()
    00074	{
    00075		// Implemented in subclass.
    00076	}
    00077
    00078	function StopLog()
    00079	{
    00080		// Implemented in subclass.
    00081	}
    00082
    00083	function FlushLog()
    00084	{
    00085		// Implemented in subclass.
    00086	}
    00087
    00088	function LogEventString( string EventString )
    00089	{
    00090		Log( EventString );
    00091		if ( LocalLog != None )
    00092			LocalLog.Log(EventString);
    00093	}
    00094
    00095	function LogWorldEventString( string EventString )
    00096	{
    00097		// don't send this event to a local log
    00098		Log( EventString );
    00099	}
    00100
    00101	// Batching
    00102	native final function ExecuteLocalLogBatcher();
    00103	native final function ExecuteSilentLogBatcher();
    00104	native final static function BatchLocal();
    00105	native final function ExecuteWorldLogBatcher();
    00106	native static function BrowseRelativeLocalURL(string URL);
    00107
    00108	// Special
    00109	native final function InitialCheck( GameInfo Game );
    00110	native final function LogMutator( Mutator M );
    00111	native static function GetPlayerChecksum( PlayerController P, out string Checksum );
    00112
    00113	// Time
    00114	native final function string GetGMTRef();
    00115
    00116	// Return absolute time.
    00117	function string GetAbsoluteTime()
    00118	{
    00119		local string AbsoluteTime;
    00120		local string GMTRef;
    00121
    00122		AbsoluteTime = string(Level.Year);
    00123
    00124		if (Level.Month < 10)
    00125			AbsoluteTime = AbsoluteTime$".0"$Level.Month;
    00126		else
    00127			AbsoluteTime = AbsoluteTime$"."$Level.Month;
    00128
    00129		if (Level.Day < 10)
    00130			AbsoluteTime = AbsoluteTime$".0"$Level.Day;
    00131		else
    00132			AbsoluteTime = AbsoluteTime$"."$Level.Day;
    00133
    00134		if (Level.Hour < 10)
    00135			AbsoluteTime = AbsoluteTime$".0"$Level.Hour;
    00136		else
    00137			AbsoluteTime = AbsoluteTime$"."$Level.Hour;
    00138
    00139		if (Level.Minute < 10)
    00140			AbsoluteTime = AbsoluteTime$".0"$Level.Minute;
    00141		else
    00142			AbsoluteTime = AbsoluteTime$"."$Level.Minute;
    00143
    00144		if (Level.Second < 10)
    00145			AbsoluteTime = AbsoluteTime$".0"$Level.Second;
    00146		else
    00147			AbsoluteTime = AbsoluteTime$"."$Level.Second;
    00148
    00149		if (Level.Millisecond < 10)
    00150			AbsoluteTime = AbsoluteTime$".0"$Level.Millisecond;
    00151		else
    00152			AbsoluteTime = AbsoluteTime$"."$Level.Millisecond;
    00153
    00154		GMTRef = GetGMTRef();
    00155
    00156		AbsoluteTime = AbsoluteTime$"."$GMTRef;
    00157
    00158		TimeStamp = 0;
    00159
    00160		return AbsoluteTime;
    00161	}
    00162
    00163	// A less verbose version...
    00164	function string GetShortAbsoluteTime()
    00165	{
    00166		local string AbsoluteTime;
    00167
    00168		AbsoluteTime = string(Level.Year);
    00169
    00170		if (Level.Month < 10)
    00171			AbsoluteTime = AbsoluteTime$".0"$Level.Month;
    00172		else
    00173			AbsoluteTime = AbsoluteTime$"."$Level.Month;
    00174
    00175		if (Level.Day < 10)
    00176			AbsoluteTime = AbsoluteTime$".0"$Level.Day;
    00177		else
    00178			AbsoluteTime = AbsoluteTime$"."$Level.Day;
    00179
    00180		if (Level.Hour < 10)
    00181			AbsoluteTime = AbsoluteTime$".0"$Level.Hour;
    00182		else
    00183			AbsoluteTime = AbsoluteTime$"."$Level.Hour;
    00184
    00185		if (Level.Minute < 10)
    00186			AbsoluteTime = AbsoluteTime$".0"$Level.Minute;
    00187		else
    00188			AbsoluteTime = AbsoluteTime$"."$Level.Minute;
    00189
    00190		if (Level.Second < 10)
    00191			AbsoluteTime = AbsoluteTime$".0"$Level.Second;
    00192		else
    00193			AbsoluteTime = AbsoluteTime$"."$Level.Second;
    00194
    00195		TimeStamp = 0;
    00196
    00197		return AbsoluteTime;
    00198	}
    00199
    00200	// Return a timestamp relative to last absolute time.
    00201	function string GetTimeStamp()
    00202	{
    00203		local string Time;
    00204		local int Pos;
    00205
    00206		Time = string(TimeStamp);
    00207		Time = Left(Time, InStr(Time, ".") + 3);
    00208		return Time;
    00209	}
    00210
    00211	// Return a logfile name if relevant.
    00212	event string GetLocalLogFileName()
    00213	{
    00214		return "";
    00215	}
    00216
    00217	// Track relative timestamps.
    00218	function Tick(float Delta)
    00219	{
    00220		TimeStamp += Delta;
    00221	}
    00222
    00223	// Standard Log Entries
    00224	function LogStandardInfo()
    00225	{
    00226		if (bWorld)
    00227		{
    00228			LogWorldEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Standard"$Chr(9)$WorldStandard);
    00229			if ( LocalLog != None )
    00230				LocalLog.LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Standard"$Chr(9)$LocalStandard);
    00231		}
    00232		else
    00233			LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Standard"$Chr(9)$LocalStandard);
    00234		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Version"$Chr(9)$LogVersion);
    00235		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Log_Info_URL"$Chr(9)$LogInfoURL);
    00236		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Name"$Chr(9)$GameName);
    00237		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Version"$Chr(9)$Level.EngineVersion);
    00238		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Creator"$Chr(9)$GameCreator);
    00239		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Creator_URL"$Chr(9)$GameCreatorURL);
    00240		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Game_Decoder_Ring_URL"$Chr(9)$DecoderRingURL);
    00241		LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Absolute_Time"$Chr(9)$GetAbsoluteTime());
    00242		if (bWorld)
    00243		{
    00244			if( Level.ConsoleCommand("get UdpServerUplink douplink") ~= string(true) )
    00245
LogWorldEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Public"$Chr(9)$"1"); 00246 else 00247 LogWorldEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Public"$Chr(9)$"0"); 00248 } 00249 } 00250 00251 function LogServerInfo() 00252 { 00253 local string NetworkNumber; 00254 00255 NetworkNumber = Level.Game.GetNetworkNumber(); 00256 00257 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_ServerName"$Chr(9)$Level.Game.GameReplicationInfo.ServerName); 00258 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_AdminName"$Chr(9)$Level.Game.GameReplicationInfo.AdminName); 00259 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_AdminEmail"$Chr(9)$Level.Game.GameReplicationInfo.AdminEmail); 00260 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Region"$Chr(9)$Level.Game.GameReplicationInfo.Region); 00261 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_MOTDLine1"$Chr(9)$Level.Game.GameReplicationInfo.MOTDLine1); 00262 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_MOTDLine2"$Chr(9)$Level.Game.GameReplicationInfo.MOTDLine2); 00263 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_MOTDLine3"$Chr(9)$Level.Game.GameReplicationInfo.MOTDLine3); 00264 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_MOTDLine4"$Chr(9)$Level.Game.GameReplicationInfo.MOTDLine4); 00265 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_IP"$Chr(9)$NetworkNumber); 00266 LogEventString(GetTimeStamp()$Chr(9)$"info"$Chr(9)$"Server_Port"$Chr(9)$Level.Game.GetServerPort()); 00267 } 00268 00269 final event LogGameSpecial(String SpecialID, String SpecialParam) 00270 { 00271 LogEventString(GetTimeStamp()$Chr(9)$"game"$Chr(9)$SpecialID$Chr(9)$SpecialParam); 00272 } 00273 00274 final event LogGameSpecial2(String SpecialID, String SpecialParam, String SpecialParam2) 00275 { 00276 LogEventString(GetTimeStamp()$Chr(9)$"game"$Chr(9)$SpecialID$Chr(9)$SpecialParam$Chr(9)$SpecialParam2); 00277 } 00278 00279 native final function string GetMapFileName(); 00280 00281 function LogMapParameters() 00282 { 00283 local string MapName; 00284 00285 MapName = GetMapFileName(); 00286 00287 LogEventString(GetTimeStamp()$Chr(9)$"map"$Chr(9)$"Name"$Chr(9)$MapName); 00288 LogEventString(GetTimeStamp()$Chr(9)$"map"$Chr(9)$"Title"$Chr(9)$Level.Title); 00289 LogEventString(GetTimeStamp()$Chr(9)$"map"$Chr(9)$"Author"$Chr(9)$Level.Author); 00290 LogEventString(GetTimeStamp()$Chr(9)$"map"$Chr(9)$"IdealPlayerCount"$Chr(9)$Level.IdealPlayerCount); 00291 LogEventString(GetTimeStamp()$Chr(9)$"map"$Chr(9)$"LevelEnterText"$Chr(9)$Level.LevelEnterText); 00292 } 00293 00294 function LogPlayerConnect(Controller Player, optional string Checksum) 00295 { 00296 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Connect"$Chr(9)$Player.PlayerReplicationInfo.PlayerName$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$Player.IsA('Admin')); 00297 LogPlayerInfo(Player); 00298 } 00299 00300 function LogPlayerInfo(Controller Player) 00301 { 00302 if ( Player.PlayerReplicationInfo.Team != None ) 00303 { 00304 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"TeamName"$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$Player.PlayerReplicationInfo.Team.TeamName); 00305 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Team"$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$Player.PlayerReplicationInfo.Team.TeamIndex); 00306 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"TeamID"$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$Player.PlayerReplicationInfo.TeamID); 00307 } 00308 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Ping"$Chr(9)$Player.PlayerReplicationInfo.PlayerID$Chr(9)$Player.PlayerReplicationInfo.Ping); 00309 } 00310 00311 function LogPlayerDisconnect(Controller Player) 00312 { 00313 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Disconnect"$Chr(9)$Player.PlayerReplicationInfo.PlayerID); 00314 } 00315 00316 function LogKill( PlayerReplicationInfo KillerPRI, PlayerReplicationInfo VictimPRI, string KillerWeaponName, string VictimWeaponName, class<DamageType> DamageType ) 00317 { 00318 local string KillType; 00319 00320 if (VictimPRI == None) 00321 return; 00322 00323 if ( KillerPRI == VictimPRI ) 00324 { 00325 LogEventString(GetTimeStamp()$Chr(9)$"suicide"$Chr(9)$KillerPRI.PlayerID$Chr(9)$KillerWeaponName$Chr(9)$DamageType$Chr(9)$"None"); 00326 return; 00327 } 00328 if ( KillerPRI.Team == VictimPRI.Team ) 00329 KillType = "teamkill"; 00330 else 00331 KillType = "kill"; 00332 LogEventString(GetTimeStamp()$Chr(9)$KillType$Chr(9)$KillerPRI.PlayerID$Chr(9)$KillerWeaponName$Chr(9)$VictimPRI.PlayerID$Chr(9)$VictimWeaponName$Chr(9)$DamageType); 00333 } 00334 00335 function LogNameChange(Controller Other) 00336 { 00337 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Rename"$Chr(9)$Other.PlayerReplicationInfo.PlayerName$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00338 } 00339 00340 function LogTeamChange(Controller Other) 00341 { 00342 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Teamchange"$Chr(9)$Other.PlayerReplicationInfo.PlayerID$Chr(9)$Other.PlayerReplicationInfo.Team); 00343 } 00344 00345 function LogTypingEvent(bool bTyping, Controller Other) 00346 { 00347 LogEventString(GetTimeStamp()$Chr(9)$"typing"$Chr(9)$bTyping$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00348 } 00349 00350 function LogPickup(Pickup Item, Pawn Other) 00351 { 00352 if ( (Item.InventoryType != None) && (Item.InventoryType.Default.ItemName != "") ) 00353 LogEventString(GetTimeStamp()$Chr(9)$"item_get"$Chr(9)$Item.InventoryType.Default.ItemName$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00354 else 00355 LogEventString(GetTimeStamp()$Chr(9)$"item_get"$Chr(9)$Item$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00356 } 00357 00358 function LogItemActivate(Inventory Item, Pawn Other) 00359 { 00360 if ( (Other == None) || (Other.PlayerReplicationInfo == None) || (Item == None) ) 00361 return; 00362 LogEventString(GetTimeStamp()$Chr(9)$"item_activate"$Chr(9)$Item.ItemName$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00363 } 00364 00365 function LogItemDeactivate(Inventory Item, Pawn Other) 00366 { 00367 LogEventString(GetTimeStamp()$Chr(9)$"item_deactivate"$Chr(9)$Item.ItemName$Chr(9)$Other.PlayerReplicationInfo.PlayerID); 00368 } 00369 00370 function LogSpecialEvent(string EventType, optional coerce string Arg1, optional coerce string Arg2, optional coerce string Arg3, optional coerce string Arg4) 00371 { 00372 local string Event; 00373 00374 Event = EventType; 00375 if (Arg1 != "") 00376 Event = Event$Chr(9)$Arg1; 00377 if (Arg2 != "") 00378 Event = Event$Chr(9)$Arg2; 00379 if (Arg3 != "") 00380 Event = Event$Chr(9)$Arg3; 00381 if (Arg4 != "") 00382 Event = Event$Chr(9)$Arg4; 00383 00384 LogEventString(GetTimeStamp()$Chr(9)$Event); 00385 } 00386 00387 function LogPings() 00388 { 00389 local PlayerReplicationInfo PRI; 00390 00391 foreach DynamicActors(class'PlayerReplicationInfo', PRI) 00392 LogEventString(GetTimeStamp()$Chr(9)$"player"$Chr(9)$"Ping"$Chr(9)$PRI.PlayerID$Chr(9)$PRI.Ping); 00393 } 00394 00395 function LogGameStart() 00396 { 00397 LogEventString(GetTimeStamp()$Chr(9)$"game_start"); 00398 } 00399 00400 function LogGameEnd( string Reason ) 00401 { 00402 LogEventString(GetTimeStamp()$Chr(9)$"game_end"$Chr(9)$Reason); 00403 } 00404 00405 defaultproperties 00406 { 00407 LocalStandard="ngLog" 00408 WorldStandard="ngLog" 00409 LogVersion="1.2" 00410 LogInfoURL="http://www.netgamesusa.com/ngLog/" 00411 GameName="Unreal" 00412 GameCreator="Epic MegaGames, Inc." 00413 GameCreatorURL="http://www.epicgames.com/" 00414 DecoderRingURL="http://unreal.epicgames.com/Unreal_Log_Decoder_Ring.html" 00415 LocalBatcherURL="../NetGamesUSA.com/ngStats/ngStatsUT.exe" 00416 LocalStatsURL="../NetGamesUSA.com/ngStats/html/ngStats_Main.html" 00417 WorldBatcherURL="../NetGamesUSA.com/ngWorldStats/bin/ngWorldStats.exe" 00418 WorldBatcherParams="-d ../NetGamesUSA.com/ngWorldStats/logs -g UT" 00419 WorldStatsURL="http://www.netgamesusa.com" 00420 LocalLogDir="../Logs" 00421 WorldLogDir="../NetGamesUSA.com/ngWorldStats/logs" 00422 }

End Source Code