170 lines
5.3 KiB
C#
170 lines
5.3 KiB
C#
using System;
|
|
using Server.Commands;
|
|
using Server.Accounting;
|
|
using Server.Network;
|
|
using Server.Targeting;
|
|
|
|
namespace Server
|
|
{
|
|
public class HardwareInfo
|
|
{
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int CpuModel { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int CpuClockSpeed { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int CpuQuantity { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int OSMajor { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int OSMinor { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int OSRevision { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int InstanceID { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int ScreenWidth { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int ScreenHeight { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int ScreenDepth { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int PhysicalMemory { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int CpuManufacturer { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int CpuFamily { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int VCVendorID { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int VCDeviceID { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int VCMemory { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int DXMajor { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int DXMinor { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public string VCDescription { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public string Language { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int Distribution { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int ClientsRunning { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int ClientsInstalled { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public int PartialInstalled { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public string Unknown { get; private set; }
|
|
|
|
[CommandProperty( AccessLevel.GameMaster )]
|
|
public DateTime TimeReceived { get; private set; }
|
|
|
|
public static void Initialize()
|
|
{
|
|
PacketHandlers.Register( 0xD9, 0x10C, false, OnReceive );
|
|
|
|
CommandSystem.Register( "HWInfo", AccessLevel.GameMaster, HWInfo_OnCommand );
|
|
}
|
|
|
|
[Usage( "HWInfo" )]
|
|
[Description( "Displays information about a targeted player's hardware." )]
|
|
public static void HWInfo_OnCommand( CommandEventArgs e )
|
|
{
|
|
e.Mobile.BeginTarget( -1, false, TargetFlags.None, HWInfo_OnTarget );
|
|
e.Mobile.SendMessage( "Target a player to view their hardware information." );
|
|
}
|
|
|
|
public static void HWInfo_OnTarget( Mobile from, object obj )
|
|
{
|
|
if ( obj is Mobile m && m.Player )
|
|
{
|
|
if ( m.Account is Account acct )
|
|
{
|
|
HardwareInfo hwInfo = acct.HardwareInfo;
|
|
|
|
if ( hwInfo != null )
|
|
CommandLogging.WriteLine( from, "{0} {1} viewing hardware info of {2}", from.AccessLevel, CommandLogging.Format( from ), CommandLogging.Format( m ) );
|
|
|
|
if ( hwInfo != null )
|
|
from.SendGump( new Gumps.PropertiesGump( from, hwInfo ) );
|
|
else
|
|
from.SendMessage( "No hardware information for that account was found." );
|
|
}
|
|
else
|
|
{
|
|
from.SendMessage( "No account has been attached to that player." );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.BeginTarget( -1, false, TargetFlags.None, HWInfo_OnTarget );
|
|
from.SendMessage( "That is not a player. Try again." );
|
|
}
|
|
}
|
|
|
|
public static void OnReceive( NetState state, PacketReader pvSrc )
|
|
{
|
|
pvSrc.ReadByte(); // 1: <4.0.1a, 2>=4.0.1a
|
|
|
|
HardwareInfo info = new HardwareInfo();
|
|
|
|
info.InstanceID = pvSrc.ReadInt32();
|
|
info.OSMajor = pvSrc.ReadInt32();
|
|
info.OSMinor = pvSrc.ReadInt32();
|
|
info.OSRevision = pvSrc.ReadInt32();
|
|
info.CpuManufacturer = pvSrc.ReadByte();
|
|
info.CpuFamily = pvSrc.ReadInt32();
|
|
info.CpuModel = pvSrc.ReadInt32();
|
|
info.CpuClockSpeed = pvSrc.ReadInt32();
|
|
info.CpuQuantity = pvSrc.ReadByte();
|
|
info.PhysicalMemory = pvSrc.ReadInt32();
|
|
info.ScreenWidth = pvSrc.ReadInt32();
|
|
info.ScreenHeight = pvSrc.ReadInt32();
|
|
info.ScreenDepth = pvSrc.ReadInt32();
|
|
info.DXMajor = pvSrc.ReadInt16();
|
|
info.DXMinor = pvSrc.ReadInt16();
|
|
info.VCDescription = pvSrc.ReadUnicodeStringLESafe( 64 );
|
|
info.VCVendorID = pvSrc.ReadInt32();
|
|
info.VCDeviceID = pvSrc.ReadInt32();
|
|
info.VCMemory = pvSrc.ReadInt32();
|
|
info.Distribution = pvSrc.ReadByte();
|
|
info.ClientsRunning = pvSrc.ReadByte();
|
|
info.ClientsInstalled = pvSrc.ReadByte();
|
|
info.PartialInstalled = pvSrc.ReadByte();
|
|
info.Language = pvSrc.ReadUnicodeStringLESafe( 4 );
|
|
info.Unknown = pvSrc.ReadStringSafe( 64 );
|
|
|
|
info.TimeReceived = DateTime.UtcNow;
|
|
|
|
if ( state.Account is Account acct )
|
|
acct.HardwareInfo = info;
|
|
}
|
|
}
|
|
}
|