public static void Start(string dbPath)
        {
            LoginDatabase = new PropertiesFile (dbPath);
            LoginDatabase.Load ();

            if (LoginDatabase.Count == 0)
            {
                var bytes = new byte [8];
                (new Random ((int) DateTime.Now.Ticks)).NextBytes (bytes);

                string password = String.Format ("{0:x2}{1:x2}-{2:x2}{3:x2}-{4:x2}{5:x2}-{6:x2}{7:x2}",
                    bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7]);
                string login = "******";
                ProgramLog.Admin.Log ("The rcon login database was empty, a new user \"{1}\" has been created with password: {0}", password, login);

                LoginDatabase.setValue (login, Hash (login, password));
            }

            LoginDatabase.Save ();

            var bind = Program.properties.RConBindAddress;
            var split = bind.Split(':');
            IPAddress addr;
            ushort port;

            if (split.Length != 2 || !IPAddress.TryParse (split[0], out addr) || !ushort.TryParse (split[1], out port) || port < 1)
            {
                ProgramLog.Error.Log ("{0} is not a valid bind address, remote console disabled.", bind);
                return;
            }

            listener = new TcpListener (addr, port);

            try
            {
                listener.Start();
            }
            catch (Exception)
            {
                ProgramLog.Error.Log ("Failed to bind to address {0}, remote console disabled.", bind);
                //ProgramLog.Log (exception, "Failed to bind to address 127.0.0.1:" + 7776);
                return;
            }

            thread = new ProgramThread ("RCon", RConLoop);
            thread.Start ();
        }
예제 #2
0
파일: Regions.cs 프로젝트: zealic/TDSM
        protected override void Initialized(object state)
        {
            if (!Directory.Exists(RegionsFolder))
                Directory.CreateDirectory(RegionsFolder);

            rProperties = new Properties(RegionsFolder + Path.DirectorySeparatorChar + "regions.properties");
            rProperties.Load();

            rProperties.AddHeaderLine("Use 'rectify=false' to ignore world alterations from");
            rProperties.AddHeaderLine("players who are blocked; Possibly saving bandwidth.");

            rProperties.pushData();
            rProperties.Save(false);

            if (rProperties.RectifyChanges)
                WorldAlter = HookResult.RECTIFY;

            SelectorItem = rProperties.SelectionToolID;
            #region set up mysql properties

            string pluginFolder = Statics.PluginPath + Path.DirectorySeparatorChar + "mysql";
            if (!Directory.Exists(pluginFolder))
            {
                Directory.CreateDirectory(pluginFolder);
            }

            mysql = new PropertiesFile(pluginFolder + Path.DirectorySeparatorChar + "mysql.properties");
            mysql.Load();
            var dummy1 = mysqlenabled;
            var dummy2 = mysqlserver;
            var dummy3 = mysqldatabase;
            var dummy4 = mysqluser;
            var dummy5 = mysqlpassword;
            var dummy6 = imported;
            mysql.Save(false);

            #endregion

            #region check if mysql table exists
            if (mysqlenabled)
            {
                try
                {
                    checkTable(connectionString, "terraria_regions");
                }
                catch (MySqlException e)
                {
                    if (e.Number == 1042)
                    {
                        ProgramLog.Error.Log("[Regions] Could not connect to mysql server. Falling back to using regions files");
                        mysql.setValue("mysql-enabled", "False");
                        mysql.Save();
                    }
                    else
                    {
                        ProgramLog.Error.Log("[Regions] MYSQL ERROR CODE: " + e.Number);
                        ProgramLog.Error.Log(e.StackTrace);
                    }
                }
            }
            #endregion

            regionManager = new RegionManager(DataFolder);
            selection = new Selection();

            commands = new Commands();
            commands.regionManager = regionManager;
            commands.RegionsPlugin = this;
            commands.selection = selection;

            commands.Node_Create        = Node.FromPath("region.create");
            commands.Node_Here          = Node.FromPath("region.here");
            commands.Node_List          = Node.FromPath("region.list");
            commands.Node_Npcres        = Node.FromPath("region.npcres");
            commands.Node_Opres         = Node.FromPath("region.opres");
            commands.Node_Projectile    = Node.FromPath("region.projectile");
            commands.Node_ProtectAll    = Node.FromPath("region.protectall");
            commands.Node_Select        = Node.FromPath("region.select");
            commands.Node_User          = Node.FromPath("region.user");

            AddCommand("region")
                .WithAccessLevel(AccessLevel.OP)
                .WithHelpText("Usage:    region [select, create, user, list, npcres, opres]")
                .WithDescription("Region Management.")
                .WithPermissionNode("regions")
                .Calls(commands.Region);

            AddCommand("regions")
                .WithAccessLevel(AccessLevel.OP)
                .WithHelpText("Usage:    regions [select, create, user, list, npcres, opres]")
                .WithDescription("Region Management.")
                .WithPermissionNode("regions") //Need another method to split the commands up.
                .Calls(commands.Region);

            ChestBreak      = AddAndCreateNode("region.chestbreak");
            ChestOpen       = AddAndCreateNode("region.chestopen");
            DoorChange      = AddAndCreateNode("region.doorchange");
            LiquidFlow      = AddAndCreateNode("region.liquidflow");
            ProjectileUse   = AddAndCreateNode("region.projectileuse");
            SignEdit        = AddAndCreateNode("region.signedit");
            TileBreak       = AddAndCreateNode("region.tilebreak");
            TilePlace       = AddAndCreateNode("region.tileplace");
        }
예제 #3
0
        protected override void Initialized(object state)
        {
            string pluginFolder = Statics.PluginPath + Path.DirectorySeparatorChar + "mysql";
            CreateDirectory (pluginFolder);

            properties = new PropertiesFile (pluginFolder + Path.DirectorySeparatorChar + "mysql.properties");
            properties.Load ();
            var dummy1 = mysqlenabled;
            var dummy2 = mysqlserver;
            var dummy3 = mysqldatabase;
            var dummy4 = mysqluser;
            var dummy5 = mysqlpassword;
            var dummy8 = logtiles;
            var dummy9 = logplayers;
            var dummy10 = logliquid;
            var dummy11 = logplants;
            properties.Save ();
            if (mysqlenabled) {
                try
                {
                    checkTable("terraria");
                    checkTable("terraria_tiles");
                    checkTable("terraria_iplog");
                    if (!logtiles)
                    {
                        ProgramLog.Error.Log("[Mysql] logtiles is disabled. Edit mysql.properties to enable");
                    }
                }
                catch (MySqlException e)
                {
                    if (e.Number == 1042)
                    {
                        ProgramLog.Error.Log("[Mysql] Could not connect to mysql server. Setting mysql-enabled to false.");
                        properties.setValue("mysql-enabled", "False");
                        properties.Save();
                    }
                    else
                    {
                        ProgramLog.Error.Log("[Mysql] MYSQL ERROR CODE: " + e.Number);
                        ProgramLog.Error.Log(e.StackTrace);
                    }
                }
            } else {
                ProgramLog.Error.Log ("[Mysql] connection not enabled. Please edit mysql.properties");
            }

            AddCommand ("mysql")
                .WithDescription ("MySQL settings")
                .WithAccessLevel (AccessLevel.OP)
                .WithHelpText ("To reload settings from mysql.properties:")
                .WithHelpText ("mysql -L")
                .Calls (this.OptionsCommand);

            AddCommand ("blockinfo")
                .WithDescription ("retrieves block history of blocks you touch")
                .WithAccessLevel (AccessLevel.OP)
                .WithHelpText ("each time you use the command it toggles true/false")
                .Calls (this.LocationCommand);

            AddCommand ("lastseen")
                .WithDescription ("find when someone was on last")
                .WithAccessLevel (AccessLevel.PLAYER) //everyone can use this command
                .WithHelpText ("To use:")
                .WithHelpText ("lastseen \"playername\"")
                .Calls (this.LastSeenCommand);

            //TODO: fix THIS
            //AddCommand ("rollback")
            //	.WithDescription ("revert the world's changes in the specified amount of minutes")
            //   .WithAccessLevel(AccessLevel.OP)
            //	.WithHelpText (" eg. /rollback 5 ")
            //	.Calls (this.RollbackCommand);

            // these two are not released in this version

            //AddCommand ("undo")
            //	.WithDescription ("undo a players actions")
            //	.WithHelpText (" eg. /undo \"crazy griefer\" ")
            //	.Calls (this.UndoCommand);

            //AddCommand ("redo")
            //	.WithDescription ("redoes a players actions")
            //	.WithHelpText (" eg. /redo \"builders name\" ")
            //	.Calls (this.RedoCommand);
        }