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; } } }