Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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;
            }
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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);
        }