using System; using Server.Accounting; using Server.Commands; using Server.Gumps; 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 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; } } }