예제 #1
0
        public static void Init()
        {
            if (!Directory.Exists(Util.GetPublicFolder()))
            {
                Directory.CreateDirectory(Util.GetPublicFolder());
            }

            Logger.Init();
            CryptoExtensions.Init();
            DataStore.GetInstance().Load();
            Server.GetInstance();

            CSharpPluginLoader.GetInstance();
            CSScriptPluginLoader.GetInstance();
            JSPluginLoader.GetInstance();
            PYPluginLoader.GetInstance();

            InstallThreadedOutput();

            ReloadTimers();
            server.official = false;
        }
예제 #2
0
        public static void PlayerConnected(Network.Connection connection)
        {
            var player = connection.player as BasePlayer;
            var p      = new Player(player);

            if (Server.GetInstance().OfflinePlayers.ContainsKey(player.userID))
            {
                Server.GetInstance().OfflinePlayers.Remove(player.userID);
            }
            if (!Server.GetInstance().Players.ContainsKey(player.userID))
            {
                Server.GetInstance().Players.Add(player.userID, p);
            }

            OnPlayerConnected.OnNext(p);
            if (Config.GetInstance().GetBoolValue("Config", "welcomeMessage", true))
            {
                p.Message("Welcome " + p.Name + "!");
                p.Message(String.Format("This server is powered by Pluton[v{0}]!", Bootstrap.Version));
                p.Message("Visit pluton-team.org for more information or to report bugs!");
            }
        }
예제 #3
0
        public static void reload(ConsoleSystem.Arg arg)
        {
            if (PluginLoader.GetInstance().Plugins.ContainsKey(arg.ArgsStr))
            {
                PluginLoader.GetInstance().ReloadPlugin(arg.ArgsStr);
                arg.ReplyWith(String.Format("{0} plugin reloaded!", arg.ArgsStr));
            }
            else if (arg.ArgsStr == "")
            {
                DirectoryConfig.GetInstance().Reload();
                CoreConfig.GetInstance().Reload();
                Config.GetInstance().Reload();

                Server.GetInstance().LoadLoadouts();

                if (Server.GetInstance().Loaded)
                {
                    Hooks.On_ServerInit();
                }

                PluginLoader.GetInstance().ReloadPlugins();

                arg.ReplyWith("Pluton reloaded!");

                var planes = (from plane in UnityEngine.Object.FindObjectsOfType <CargoPlane>()
                              where plane.transform.position.x == 0f && plane.transform.position.z == 0f
                              select plane).ToList();
                planes.ForEach(p => p.SendMessage("KillMessage", UnityEngine.SendMessageOptions.DontRequireReceiver));
                if (planes.Count != 0)
                {
                    Pluton.Logger.LogWarning(String.Format("Destroyed {0} plane at Vector3.zero", planes.Count));
                }
            }
            else
            {
                arg.ReplyWith(String.Format("Couldn't find plugin: {0}!", arg.ArgsStr));
            }
        }
예제 #4
0
        public void LoadPlugin(string name)
        {
            Logger.LogDebug("[PHPPluginLoader] Loading plugin " + name + ".");

            if (PluginLoader.GetInstance().Plugins.ContainsKey(name))
            {
                Logger.LogError("[PHPPluginLoader] " + name + " plugin is already loaded.");
                throw new InvalidOperationException("[PHPPluginLoader] " + name + " plugin is already loaded.");
            }

            try
            {
                string        code = GetSource(name);
                DirectoryInfo path = new DirectoryInfo(Path.Combine(PluginLoader.GetInstance().pluginDirectory.FullName, name));
                new PHPPlugin(name, code, path);
            }
            catch (Exception ex)
            {
                Server.GetInstance().Broadcast(name + " plugin could not be loaded.");
                Logger.Log("[PHPPluginLoader] " + name + " plugin could not be loaded.");
                Logger.LogException(ex);
            }
        }
예제 #5
0
        // BasePlayer.OnDisconnected()
        public static void On_PlayerDisconnected(BasePlayer player)
        {
            var p = Server.GetPlayer(player);

            if (Server.GetInstance().serverData.ContainsKey("OfflinePlayers", p.SteamID))
            {
                OfflinePlayer op = (Server.GetInstance().serverData.Get("OfflinePlayers", p.SteamID) as OfflinePlayer);
                op.Update(p);
                Server.GetInstance().OfflinePlayers[player.userID] = op;
            }
            else
            {
                OfflinePlayer op = new OfflinePlayer(p);
                Server.GetInstance().OfflinePlayers.Add(player.userID, op);
            }

            if (Server.GetInstance().Players.ContainsKey(player.userID))
            {
                Server.GetInstance().Players.Remove(player.userID);
            }

            OnNext("On_PlayerDisconnected", p);
        }
예제 #6
0
        public override void Load(string code = "")
        {
            try
            {
                UserData.RegistrationPolicy = InteropRegistrationPolicy.Automatic;
                script = new Script();
                script.Globals["Plugin"]                = this;
                script.Globals["Util"]                  = Util.GetInstance();
                script.Globals["Server"]                = Server.GetInstance();
                script.Globals["DataStore"]             = DataStore.GetInstance();
                script.Globals["Commands"]              = chatCommands;
                script.Globals["GlobalData"]            = GlobalData;
                script.Globals["ServerConsoleCommands"] = consoleCommands;
                script.Globals["Web"]   = Web.GetInstance();
                script.Globals["World"] = World.GetInstance();
                script.DoString(code);

                Author  = script.Globals.Get("Author").String;
                About   = script.Globals.Get("About").String;
                Version = script.Globals.Get("Version").String;

                State = PluginState.Loaded;
                foreach (DynValue v in script.Globals.Keys)
                {
                    Globals.Add(v.ToString().Replace("\"", ""));
                }
                Tables = script.Globals;
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                State = PluginState.FailedToLoad;
            }

            PluginLoader.GetInstance().OnPluginLoaded(this);
        }
예제 #7
0
        // chat.say().Hooks.Chat()
        public static void Command(ConsoleSystem.Arg arg)
        {
            Player player = Server.GetPlayer(arg.Player());

            string[] args = arg.ArgsStr.Substring(2, arg.ArgsStr.Length - 3).Replace("\\", "").Split(new string[] { " " }, StringSplitOptions.None);

            CommandEvent cmd = new CommandEvent(player, args);

            if (cmd.cmd == "")
            {
                return;
            }

            foreach (KeyValuePair <string, BasePlugin> pl in PluginLoader.GetInstance().Plugins)
            {
                ChatCommand[] commands = pl.Value.chatCommands.getChatCommands(cmd.cmd);
                foreach (ChatCommand chatCmd in commands)
                {
                    if (chatCmd.callback == null)
                    {
                        continue;
                    }

                    CommandPermissionEvent permission = new CommandPermissionEvent(player, args, chatCmd);
                    OnCommandPermission.OnNext(permission);
                    if (permission.blocked)
                    {
                        player.Message(permission.Reply);
                        continue;
                    }

                    try {
                        chatCmd.callback(cmd.args, player);
                    } catch (Exception ex) {
                        Logger.LogError(chatCmd.plugin.FormatException(ex));
                    }
                }
            }

            if (Config.GetInstance().GetBoolValue("Commands", "enabled", true))
            {
                // TODO: make a plugin from these, no need to be in the core

                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowMyStats", "mystats"))
                {
                    PlayerStats stats = player.Stats;
                    player.Message(String.Format("You have {0} kills and {1} deaths!", stats.Kills, stats.Deaths));
                    player.Message(String.Format("You have taken {0} dmg, and caused {1} in total!", stats.TotalDamageTaken, stats.TotalDamageDone));
                    return;
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowStatsOther", "statsof"))
                {
                    Player pOther = Player.Find(String.Join(" ", cmd.args));
                    if (pOther != null)
                    {
                        PlayerStats stats2 = pOther.Stats;
                        player.Message(String.Format(pOther.Name + " has {0} kills and {1} deaths!", stats2.Kills, stats2.Deaths));
                        player.Message(String.Format(pOther.Name + " has taken {0} dmg, and caused {1} in total!", stats2.TotalDamageTaken, stats2.TotalDamageDone));
                        return;
                    }
                    player.Message("Can't find player: " + String.Join(" ", cmd.args));
                    return;
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowLocation", "whereami"))
                {
                    player.Message(player.Location.ToString());
                    return;
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "ShowOnlinePlayers", "players"))
                {
                    string msg = Server.GetInstance().Players.Count == 1 ? "You are alone!" : String.Format("There are: {0} players online!", Server.GetInstance().Players.Count);
                    player.Message(msg);
                    return;
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Help", "help"))
                {
                    foreach (string key in Config.GetInstance().PlutonConfig.EnumSection("HelpMessage"))
                    {
                        player.Message(Config.GetInstance().GetValue("HelpMessage", key));
                    }
                }

                List <ChatCommands> cc = new List <ChatCommands>();
                foreach (KeyValuePair <string, BasePlugin> pl in PluginLoader.GetInstance().Plugins)
                {
                    cc.Add(pl.Value.chatCommands);
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Commands", "commands"))
                {
                    List <string> list = new List <string>();
                    foreach (ChatCommands cm in cc)
                    {
                        list.AddRange(cm.getCommands());
                    }
                    player.Message(String.Join(", ", list.ToArray()));
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Description", "whatis"))
                {
                    if (cmd.args.Length < 1)
                    {
                        player.Message("You must provide a command name");
                    }
                    else
                    {
                        List <string> list = new List <string>();
                        foreach (ChatCommands cm in cc)
                        {
                            list.AddRange(cm.getDescriptions(cmd.args[0]));
                        }
                        if (list.Count > 0)
                        {
                            player.Message(String.Join("\r\n", list.ToArray()));
                        }
                    }
                }
                if (cmd.cmd == Config.GetInstance().GetValue("Commands", "Usage", "howto"))
                {
                    if (cmd.args.Length < 1)
                    {
                        player.Message("You must provide a command name");
                    }
                    else
                    {
                        List <string> list = new List <string>();
                        foreach (ChatCommands cm in cc)
                        {
                            list.AddRange(cm.getUsages(cmd.args[0]));
                        }
                        foreach (var item in list)
                        {
                            player.Message(String.Format("/{0} {1}", cmd.args[0], item));
                        }
                    }
                }
            }
            OnCommand.OnNext(cmd);

            if (cmd.Reply != "")
            {
                arg.ReplyWith(cmd.Reply);
            }
        }