public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (TargetID == 0) { xtlk.text = "Sorry, you must target a user to use this command."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var targetSessionState = SessionManager.sessionStates[TargetID]; targetSessionState.userFlags |= (short)UserFlags.U_PropGag; targetSessionState.details.nbrProps = 0; targetSessionState.details.propSpec = null; SessionManager.SendToRoomID(targetSessionState.RoomID, 0, new MSG_USERPROP { nbrProps = 0, propSpec = null, }, EventTypes.MSG_USERPROP, (Int32)TargetID); xtlk.text = $"User {targetSessionState.details.name} is now propgagged!"; SessionManager.SendToRoomID(targetSessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; if (sessionState.extended.ContainsKey("OfferBuffer")) { var userProp = new MSG_USERPROP { propSpec = (AssetSpec[])sessionState.extended["OfferBuffer"], }; userProp.nbrProps = (Int16)userProp.propSpec.Length; sessionState.Send(userProp, EventTypes.MSG_USERPROP, (Int32)UserID); } else { var xtlk = new MSG_XTALK { text = $"No one has offered you their avatar.", }; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); xtlk.text = string.Join(" ", args); SessionManager.SendToRoomID(sessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0); return true; }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; var xtlk = new MSG_XTALK(); var banrecs = dbContext.Bans.AsNoTracking() .ToList(); if (banrecs.Count > 0) { banrecs .ForEach(banrec => { var regRec = new RegistrationRec { counter = (UInt32)banrec.RegCtr, crc = (UInt32)banrec.RegCrc, puidCtr = (UInt32)banrec.Puidctr, puidCRC = (UInt32)banrec.Puidcrc, }; var regCode = Cipher.RegRectoSeed(regRec); var puidCode = Cipher.RegRectoSeed(regRec, true); xtlk.text = $"; {{{banrec.Ipaddress}}} {regCode} {puidCode}: {banrec.Note}"; if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog(xtlk.text); } else { sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } }); } else { xtlk.text = "There are currently no bans to list..."; if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog(xtlk.text); } else { sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); sessionState.userFlags &= ~(short)UserFlags.U_Hide; xtlk.text = $"You are now unhidden!"; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); var targetSessionState = SessionManager.sessionStates[TargetID]; targetSessionState.userFlags |= (short)UserFlags.U_Gag; xtlk.text = $"User {targetSessionState.details.name} is now gagged!"; SessionManager.SendToRoomID(sessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0); return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (TargetID == 0) { xtlk.text = "Sorry, you must target a user to use this command."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var targetSessionState = SessionManager.sessionStates[TargetID]; foreach (var asset in targetSessionState.details.propSpec) { var dbAsset = dbContext.Assets .Where(a => a.AssetId == asset.id) .FirstOrDefault(); if (dbAsset != null) { dbContext.Assets.Remove(dbAsset); } } if (dbContext.HasUnsavedChanges()) { dbContext.SaveChanges(); } targetSessionState.details.nbrProps = 0; targetSessionState.details.propSpec = null; SessionManager.SendToRoomID(targetSessionState.RoomID, 0, new MSG_USERPROP { nbrProps = 0, propSpec = null, }, EventTypes.MSG_USERPROP, (Int32)targetSessionState.UserID); xtlk.text = $"{targetSessionState.details.name}'s avatar has been eraised!"; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (args.Length > 0) { ServerState.roomsCache[sessionState.RoomID].MaxOccupancy = args[0].TryParse <short>(0).Value; } xtlk.text = $"The room's maximum occupancy is currently: {ServerState.roomsCache[sessionState.RoomID].MaxOccupancy}"; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var xtlk = new MSG_XTALK(); xtlk.text = "Initiating server shutdown..."; if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog(xtlk.text); } SessionManager.SendToStaff(xtlk, EventTypes.MSG_XTALK, 0); ServerState.Shutdown(); return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { //var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog("Example: Hello World!"); } else { var xtalk = new MSG_XTALK { text = "Example: Hello World!", }; SessionManager.SendToUserID(UserID, xtalk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var maxOccupany = (UInt32)0; var xtlk = new MSG_XTALK(); if (args.Length > 0) { ConfigManager.SetValue("MaxOccupany", args[0].TryParse <short>(0).Value.ToString()); } maxOccupany = ConfigManager.GetValue <UInt32>("MaxOccupany", 100).Value; xtlk.text = $"The server's maximum occupancy is currently: {maxOccupany}"; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; if (UserID == 0xFFFFFFFF || sessionState.Authorized) { // UserID -1 means invokation from the commandline // sessionState.Authorized means staff user } else { var xtlk = new MSG_XTALK { text = "Sorry, this is an Admin only command.", }; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (TargetID == 0) { xtlk.text = "Sorry, you must target a user to use this command."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var targetSessionState = SessionManager.sessionStates[TargetID]; targetSessionState.userFlags |= (short)UserFlags.U_NameGag; if (args.Length > 0) { targetSessionState.details.name = string.Join(" ", args); var userName = new MSG_USERNAME { name = targetSessionState.details.name, }; sessionState.Send(userName, EventTypes.MSG_USERNAME, 0); } { xtlk.text = $"User {targetSessionState.details.name} is now namegagged!"; SessionManager.SendToRoomID(sessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0); } } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (TargetID == 0) { xtlk.text = "Sorry, you must target a user to use this command."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var targetSessionState = SessionManager.sessionStates[TargetID]; targetSessionState.userFlags &= ~(short)UserFlags.U_Pin; xtlk.text = $"User {targetSessionState.details.name} is now unpinned!"; SessionManager.SendToRoomID(sessionState.RoomID, 0, xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public static void AuthorizeUser(ThePalaceEntities dbContext, object message, out int AuthUserID, out List <int> AuthRoleIDs, out List <int> AuthMsgIDs, out List <string> AuthCmds) { var sessionState = ((Message)message).sessionState; var protocol = ((Message)message).protocol; var ipAddress = sessionState.driver.GetIPAddress(); var xTalkB = new Business.MSG_XTALK(); var xTalkP = new MSG_XTALK(); var authUserID = 0; var actions = new Dictionary <Type, Action> { { typeof(MSG_LOGON), () => { var inboundPacket = (MSG_LOGON)protocol; authUserID = dbContext.Auth.AsNoTracking() .AsEnumerable() .Where(a => ((a.AuthType & (byte)AuthTypes.Password) == 0 || ((a.AuthType & (byte)AuthTypes.Password) != 0 && a.Value.Trim() == (inboundPacket.reg.wizPassword ?? string.Empty).Trim())) && ((a.AuthType & (byte)AuthTypes.IPAddress) == 0 || ((a.AuthType & (byte)AuthTypes.IPAddress) != 0 && a.Value.Trim() == ipAddress)) && ((a.AuthType & (byte)AuthTypes.RegCode) == 0 || ((a.AuthType & (byte)AuthTypes.RegCode) != 0 && a.Ctr.HasValue && a.Crc.HasValue && a.Ctr == sessionState.reg.counter && a.Crc == sessionState.reg.crc)) && ((a.AuthType & (byte)AuthTypes.PUID) == 0 || ((a.AuthType & (byte)AuthTypes.PUID) != 0 && a.Ctr.HasValue && a.Crc.HasValue && a.Ctr == sessionState.reg.puidCtr && a.Crc == sessionState.reg.puidCRC))) .Select(a => a.UserId) .FirstOrDefault(); if (authUserID > 0) { xTalkP.text = $"{sessionState.details.name} ({sessionState.UserID}) [{ipAddress}] is now authorized!"; Logger.Log(MessageTypes.Info, xTalkP.text); xTalkB.SendToUserID(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); xTalkB.SendToStaff(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); } } }, { typeof(MSG_SUPERUSER), () => { var inboundPacket = (MSG_SUPERUSER)protocol; authUserID = dbContext.Auth.AsNoTracking() .AsEnumerable() .Where(a => ((a.AuthType & (byte)AuthTypes.Password) == 0 || ((a.AuthType & (byte)AuthTypes.Password) != 0 && a.Value.Trim() == (inboundPacket.password ?? string.Empty).Trim())) && ((a.AuthType & (byte)AuthTypes.IPAddress) == 0 || ((a.AuthType & (byte)AuthTypes.IPAddress) != 0 && a.Value.Trim() == ipAddress)) && ((a.AuthType & (byte)AuthTypes.RegCode) == 0 || ((a.AuthType & (byte)AuthTypes.RegCode) != 0 && a.Ctr.HasValue && a.Crc.HasValue && a.Ctr == sessionState.reg.counter && a.Crc == sessionState.reg.crc)) && ((a.AuthType & (byte)AuthTypes.PUID) == 0 || ((a.AuthType & (byte)AuthTypes.PUID) != 0 && a.Ctr.HasValue && a.Crc.HasValue && a.Ctr == sessionState.reg.puidCtr && a.Crc == sessionState.reg.puidCRC))) .Select(a => a.UserId) .FirstOrDefault(); if (authUserID > 0) { xTalkP.text = $"{sessionState.details.name} ({sessionState.UserID}) [{ipAddress}] is now authorized!"; xTalkB.SendToUserID(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); } else { xTalkP.text = $"{sessionState.details.name} ({sessionState.UserID}) [{ipAddress}] attempted authorization and failed..."; } Logger.Log(MessageTypes.Info, xTalkP.text); xTalkB.SendToStaff(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); } }, { typeof(MSG_AUTHRESPONSE), () => { var inboundPacket = (MSG_AUTHRESPONSE)protocol; authUserID = dbContext.Auth.AsNoTracking() .Where(a => ((a.AuthType & (byte)AuthTypes.Password) != 0 && a.Value.Trim() == inboundPacket.password.Trim())) .Join( dbContext.Users.AsNoTracking(), a => a.UserId, u => u.UserId, (a, u) => new { a, u } ) .Where(u => u.u.Name == inboundPacket.userName.Trim()) .Select(a => a.a.UserId) .FirstOrDefault(); if (authUserID > 0) { xTalkP.text = $"{sessionState.details.name} ({sessionState.UserID}) [{ipAddress}] is now authorized!"; xTalkB.SendToUserID(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); } else { xTalkP.text = $"{sessionState.details.name} ({sessionState.UserID}) [{ipAddress}] attempted authorization and failed..."; } Logger.Log(MessageTypes.Info, xTalkP.text); xTalkB.SendToStaff(dbContext, new Message { sessionState = sessionState, protocol = xTalkP, }); } } }; var type = protocol.GetType(); if (type != null && actions.ContainsKey(type)) { actions[type](); } if (authUserID > 0) { AuthUserID = authUserID; AuthRoleIDs = dbContext.GroupUsers.AsNoTracking() .Where(gu => gu.UserId == authUserID) .Join( dbContext.GroupRoles.AsNoTracking(), gu => gu.GroupId, gr => gr.GroupId, (gu, gr) => new { gu, gr } ) .Select(g => g.gr.RoleId) .Distinct() .ToList(); AuthMsgIDs = new List <int>(); AuthCmds = new List <string>(); sessionState.userFlags |= (short)(UserFlags.U_SuperUser | UserFlags.U_God); var now = DateTime.UtcNow; var sessionDuration_InMinutes = ConfigManager.GetValue <UInt32>("SessionDuration_InMinutes", 1440).Value; var expireDate = now.AddMinutes(sessionDuration_InMinutes); var sessionRec = dbContext.Sessions .Where(s => s.UserId == authUserID) .SingleOrDefault(); if (sessionRec == null) { sessionRec = new Sessions { UserId = authUserID, Hash = Guid.NewGuid(), UntilDate = expireDate, LastUsed = now, }; dbContext.Sessions.Add(sessionRec); } else if (sessionRec.LastUsed < now) { sessionRec.Hash = Guid.NewGuid(); sessionRec.UntilDate = expireDate; sessionRec.LastUsed = now; } else { sessionRec.LastUsed = now; } if (dbContext.HasUnsavedChanges()) { dbContext.SaveChanges(); } if (sessionState.successfullyConnected) { var uSta = new MSG_USERSTATUS { flags = sessionState.userFlags, hash = sessionRec.Hash, }; sessionState.Send(uSta, EventTypes.MSG_USERSTATUS, (Int32)sessionState.UserID); } } else { AuthUserID = 0; AuthRoleIDs = null; AuthMsgIDs = null; AuthCmds = null; } }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { args = args .Select(a => (a ?? string.Empty).ToLower()) .ToArray(); var isAdmin = (UserID == 0xFFFFFFFF) || SessionManager.sessionStates[UserID].Authorized; var xTalk = new Business.MSG_XTALK(); var protocol = new MSG_XTALK(); var type = typeof(ICommand); var types = new List <Type>(); types.AddRange(Assembly.GetExecutingAssembly().GetTypes()); types.AddRange(PluginManager.GetTypes()); var list = types .Where(t => t.Namespace == "ThePalace.Server.Commands" || t.Namespace == "ThePalace.Server.Plugins.Commands") .Where(t => isAdmin || !t.GetCustomAttributes(typeof(AdminOnlyCommandAttribute)).Any()) .Where(t => Regex.IsMatch(t.Name, @"^CMD_[\w\d_]+$", RegexOptions.IgnoreCase)) .Where(t => type.IsAssignableFrom(t)) .Where(t => t.IsClass) .Select(t => { var result = Regex.Replace(t.Name.ToLower(), @"^CMD_", string.Empty, RegexOptions.IgnoreCase); if (args.Length > 0 && !args.Contains(result)) { return(null); } var helpString = t .GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where(fi => fi.FieldType == typeof(string)) .Where(fi => fi.Name == "Help") .Where(fi => !fi.IsInitOnly) .Where(fi => fi.IsLiteral) .Select(fi => (string)fi.GetRawConstantValue()) .FirstOrDefault(); return($"; `{result}: {helpString}"); }) .Where(h => !string.IsNullOrWhiteSpace(h)) .OrderBy(h => h) .ToList(); if (UserID == 0xFFFFFFFF) { foreach (var item in list) { Logger.ConsoleLog(item); } } else { var sessionState = SessionManager.sessionStates[UserID]; foreach (var item in list) { protocol.text = item; xTalk.SendToUserID(dbContext, new Message { sessionState = sessionState, protocol = protocol, }); } } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = SessionManager.sessionStates[UserID]; var xtlk = new MSG_XTALK(); if (TargetID == 0) { xtlk.text = "Sorry, you must target a user to use this command."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var targetSessionState = SessionManager.sessionStates[TargetID]; if (targetSessionState.Authorized) { xtlk.text = "Sorry, you may not perform this command on another staff member."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var killDuration_InMinutes = ConfigManager.GetValue <Int16>("KillDuration_InMinutes", 10).Value; var killDuration_DT = DateTime.UtcNow.AddMinutes(killDuration_InMinutes); var ipAddress = targetSessionState.driver.GetIPAddress(); var serverDown = new Business.MSG_SERVERDOWN { reason = ServerDownFlags.SD_KilledBySysop, whyMessage = "You have been dispatched!", }; SessionManager.sessionStates.Values.ToList().ForEach(state => { if (state.driver.GetIPAddress() == ipAddress) { serverDown.Send(dbContext, new Message { sessionState = state, }); state.driver.DropConnection(); } dbContext.Bans.Add(new Bans { Ipaddress = ipAddress, RegCtr = (Int32)state.reg.counter, RegCrc = (Int32)state.reg.crc, Puidctr = (Int32)state.reg.puidCtr, Puidcrc = (Int32)state.reg.puidCRC, Note = state.details.name, UntilDate = killDuration_DT, }); }); } } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; var xtlk = new MSG_XTALK(); if (args.Length < 1) { xtlk.text = "A parameter is required for this command."; } else { foreach (var _arg in args) { var arg = _arg.Trim(); if (Regex.IsMatch(arg, "^[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+$")) { var records = dbContext.Bans .Where(b => b.Ipaddress == arg) .ToList(); if (records.Count > 0) { dbContext.Bans.RemoveRange(records); } } if (Regex.IsMatch(arg, @"^[\{]*[A-Q][\}]*$")) { var seed = Cipher.WizKeytoSeed(arg); var crc = Cipher.ComputeLicenseCrc((UInt32)seed); var ctr = Cipher.GetSeedFromReg((UInt32)seed, crc); var records = dbContext.Bans .Where(b => b.RegCtr == ctr && b.RegCrc == crc) .ToList(); if (records.Count > 0) { dbContext.Bans.RemoveRange(records); } } if (Regex.IsMatch(arg, @"^[\{]*[Z][A-Q][\}]*$")) { var seed = Cipher.WizKeytoSeed(arg); var crc = Cipher.ComputeLicenseCrc((UInt32)seed); var ctr = Cipher.GetSeedFromPUID((UInt32)seed, crc); var records = dbContext.Bans .Where(b => b.Puidctr == ctr && b.Puidcrc == crc) .ToList(); if (records.Count > 0) { dbContext.Bans.RemoveRange(records); } } } if (dbContext.HasUnsavedChanges()) { dbContext.SaveChanges(); xtlk.text = "Ban record(s) removed..."; } else { xtlk.text = "Unable to find ban record(s) by that criteria, try again."; } } if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog(xtlk.text); } else { sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; var xtlk = new MSG_XTALK(); if (TargetID == 0 && args.Length < 1) { xtlk.text = "A target user or parameter is required for this command."; } if (TargetID != 0) { var targetSessionState = SessionManager.sessionStates[TargetID]; if (targetSessionState.Authorized) { xtlk.text = "Sorry, you may not perform this command on another staff member."; sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } else { var ipAddress = targetSessionState.driver.GetIPAddress(); var serverDown = new Business.MSG_SERVERDOWN { reason = ServerDownFlags.SD_Banished, whyMessage = "You have been banned!", }; SessionManager.sessionStates.Values.ToList().ForEach(state => { if (state.driver.GetIPAddress() == ipAddress) { serverDown.Send(dbContext, new Message { sessionState = state, }); state.driver.DropConnection(); } dbContext.Bans.Add(new Bans { Ipaddress = ipAddress, RegCtr = (Int32)state.reg.counter, RegCrc = (Int32)state.reg.crc, Puidctr = (Int32)state.reg.puidCtr, Puidcrc = (Int32)state.reg.puidCRC, Note = state.details.name, UntilDate = null, }); }); } } if (args != null && args.Length > 0) { var bans = new List <Bans>(); var serverDown = new Business.MSG_SERVERDOWN { reason = ServerDownFlags.SD_Banished, whyMessage = "You have been banned!", }; foreach (var _arg in args) { var arg = _arg.Trim(); if (Regex.IsMatch(arg, "^[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+$")) { bans.Add(new Bans { Ipaddress = arg, UntilDate = null, }); } if (Regex.IsMatch(arg, @"^[\{]*[A-Q][\}]*$")) { var seed = Cipher.WizKeytoSeed(arg); var crc = Cipher.ComputeLicenseCrc((UInt32)seed); var ctr = Cipher.GetSeedFromReg((UInt32)seed, crc); bans.Add(new Bans { RegCrc = (Int32)crc, RegCtr = ctr, UntilDate = null, }); } if (Regex.IsMatch(arg, @"^[\{]*[Z][A-Q][\}]*$")) { var seed = Cipher.WizKeytoSeed(arg); var crc = Cipher.ComputeLicenseCrc((UInt32)seed); var ctr = Cipher.GetSeedFromPUID((UInt32)seed, crc); bans.Add(new Bans { Puidcrc = (Int32)crc, Puidctr = ctr, UntilDate = null, }); } } SessionManager.sessionStates.Values.ToList().ForEach(state => { foreach (var ban in bans) { if (state.driver.GetIPAddress() == ban.Ipaddress || (state.reg.crc == ban.RegCrc && state.reg.counter == ban.RegCtr) || (state.reg.puidCRC == ban.Puidcrc && state.reg.puidCtr == ban.Puidctr)) { ban.Note = state.details.name; serverDown.Send(dbContext, new Message { sessionState = state, }); state.driver.DropConnection(); } } }); if (bans.Count > 0) { dbContext.Bans.AddRange(bans); } } if (dbContext.HasUnsavedChanges()) { dbContext.SaveChanges(); xtlk.text = "Ban record(s) added..."; } else { xtlk.text = "Usage: `ban [<target user>] or [<IP|REG|PUID>]"; } if (UserID == 0xFFFFFFFF) { Logger.ConsoleLog(xtlk.text); } else { sessionState.Send(xtlk, EventTypes.MSG_XTALK, 0); } return(true); }
public bool Command(ThePalaceEntities dbContext, UInt32 UserID, UInt32 TargetID, params string[] args) { var sessionState = UserID != 0xFFFFFFFF ? SessionManager.sessionStates[UserID] : null; var xtlk = new MSG_XTALK { text = $"Purging Props", }; if (args.Length <= 0) { xtlk.text = $"Clearing Room[{sessionState.RoomID}] Loose Props, issued by [{sessionState.UserID}] {sessionState.details.name}"; SessionManager.SendToStaff(xtlk, EventTypes.MSG_XTALK, 0); Logger.ConsoleLog(xtlk.text); dbContext.LooseProps2.RemoveRange(dbContext.LooseProps2.AsNoTracking().Where(m => m.RoomId == sessionState.RoomID).ToList()); } else { for (int i = 0; i < args.Length; i++) { var arg = args[i]; if (!arg.Substring(0, 1).Equals("-")) { xtlk.text = "Invalid Paramters for PurgeProps specified"; if (UserID != 0xFFFFFFFF) { SessionManager.SendToUserID(sessionState.UserID, xtlk, EventTypes.MSG_XTALK, 0); } Logger.ConsoleLog(xtlk.text); break; } if (arg.Contains("T")) { if ((i + 1) >= args.Length) { xtlk.text = "[T]ime Operation requires a DateTime string to be passed"; if (UserID != 0xFFFFFFFF) { SessionManager.SendToUserID(sessionState.UserID, xtlk, EventTypes.MSG_XTALK, 0); } Logger.ConsoleLog(xtlk.text); break; } var time = args[i + 1].TryParse <DateTime>(); if (!time.HasValue) { xtlk.text = "Invalid DateTime format"; if (UserID != 0xFFFFFFFF) { SessionManager.SendToUserID(sessionState.UserID, xtlk, EventTypes.MSG_XTALK, 0); } Logger.ConsoleLog("Invalid DateTime format"); return(true); } xtlk.text = $"Removing Props Older than {time.ToString()}, issued by [{sessionState.UserID}] {sessionState.details.name}"; SessionManager.SendToStaff(xtlk, EventTypes.MSG_XTALK, 0); Logger.ConsoleLog(xtlk.text); dbContext.Assets.RemoveRange(dbContext.Assets.AsNoTracking().Where(m => m.LastUsed <= time)); i++; break; } else if (arg.Contains("C")) { xtlk.text = $"Removing All Cached Props, issued by [{sessionState.UserID}] {sessionState.details.name}"; SessionManager.SendToStaff(xtlk, EventTypes.MSG_XTALK, 0); Logger.ConsoleLog(xtlk.text); dbContext.Assets.RemoveRange(dbContext.Assets); break; } if (arg.Contains("L")) { xtlk.text = $"Purging All Loose Props, issued by [{sessionState.UserID}] {sessionState.details.name}"; SessionManager.SendToStaff(xtlk, EventTypes.MSG_XTALK, 0); Logger.ConsoleLog(xtlk.text); dbContext.LooseProps.RemoveRange(dbContext.LooseProps); break; } } } dbContext.SaveChanges(); return(true); }