public Plugin(string name, string code, DirectoryInfo path, PluginType type) { Name = name; Code = code; RootDir = path; Type = type; Timers = new Dictionary <string, TimedEvent>(); if (type == PluginType.Python) { PyEngine = IronPython.Hosting.Python.CreateEngine(); Scope = PyEngine.CreateScope(); Scope.SetVariable("Plugin", this); Scope.SetVariable("Server", Pluton.Server.GetServer()); Scope.SetVariable("DataStore", DataStore.GetInstance()); Scope.SetVariable("Util", Util.GetUtil()); Scope.SetVariable("World", World.GetWorld()); Scope.SetVariable("Commands", PluginCommands.GetInstance()); PyEngine.Execute(code, Scope); Class = PyEngine.Operations.Invoke(Scope.GetVariable(name)); Globals = PyEngine.Operations.GetMemberNames(Class); } else { JSEngine = new Engine(cfg => cfg.AllowClr(typeof(UnityEngine.GameObject).Assembly, typeof(PlayerInventory).Assembly)) .SetValue("Server", Server.GetServer()) .SetValue("DataStore", DataStore.GetInstance()) .SetValue("Util", Util.GetUtil()) .SetValue("World", World.GetWorld()) .SetValue("Plugin", this) .SetValue("Commands", PluginCommands.GetInstance()) .Execute(code); JavaScriptParser parser = new JavaScriptParser(); Globals = (from function in parser.Parse(Code).FunctionDeclarations where (function.Id.Name.StartsWith("On_") || function.Id.Name.EndsWith("Callback")) select function.Id.Name).ToList <string>(); } }
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; }
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); }