Exemplo n.º 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];

                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);
        }
Exemplo n.º 2
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);
        }