Log diretto dei client online
Da Tomo della conoscenza - UOShards Wiki.
Dalla versione 1.0 di RunUO è disponibile di base un sistema che permette di effettuare un log dei client online senza dover passare per una pagina di server status intermedia. UOShards usa già questo sistema ove possibile.
Per attivarlo assicurarsi che Scripts\Engines\RemoteAdmin\Network.cs, metodo AdminNetwork.OnReceive( NetState, PacketReader ) sia:
byte cmd = pvSrc.ReadByte();
if ( cmd == 0x02 )
{
Authenticate( state, pvSrc );
}
else if ( cmd == 0xFF )
{
string statStr = String.Format( ", Name={0}, Age={1}, Clients={2}, Items={3}, Chars={4}, Mem={5}K",
Server.Misc.ServerList.ServerName, (int)(DateTime.Now-Server.Items.Clock.ServerStart).TotalHours,
NetState.Instances.Count, World.Items.Count, World.Mobiles.Count,
(int)(System.GC.GetTotalMemory(false)/1024) );
state.Send( new UOGInfo( statStr ) );
state.Dispose();
}
else if ( !IsAuth( state ) )
{
Console.WriteLine( "ADMIN: Unauthorized packet from {0}, disconnecting", state );
Disconnect( state );
}
else
{
if ( !RemoteAdminHandlers.Handle( cmd, state, pvSrc ) )
Disconnect( state );
}
In particolare serve allo scopo la sezione dell'else if ( cmd == 0xFF ).
Inoltre in Scripts\Engines\RemoteAdmin\Packets.cs deve essere presente la classe UOGInfo:
public sealed class UOGInfo : Packet
{
public UOGInfo( string str ) : base( 0x52, str.Length+6 ) // 'R'
{
m_Stream.WriteAsciiFixed( "unUO", 4 );
m_Stream.WriteAsciiNull( str );
}
}
Come già scritto, RunUO 1.0 ha già questa funzionalità di base nella default distro. Può essere comunque aggiunta manualmente in una qualsiasi versione di RunUO inserendo questo codice negli script.
Articolo originale a cura di Phenos raggiungibile qui

