public override void CreateScope(ScriptGlobal scriptGlobal) { if (scopeSet) { return; } if (script == null) { script = (Script)getEngine(); } script.Globals["Global"] = scriptGlobal; script.Options.ScriptLoader = new MoonSharp.Interpreter.Loaders.FileSystemScriptLoader(); scopeSet = true; }
public override void CreateScope(ScriptGlobal scriptGlobal) { scope = ((ScriptEngine)getEngine()).Runtime.CreateScope(); scope.SetVariable("Global", scriptGlobal); }
public void Start() { try { var alreadyStarted = PackageManager.Packages != null && PackageManager.Packages.Any(); if (!alreadyStarted) { Log.Info("Starting"); } else { Log.Info("Restarting"); } loadPackages(); var packages = PackageManager.Packages.ToArray(); Log.Info("Executing packages"); var executionError = false; PackageManager.Packages .ForEach(package => { ScriptRunner scriptRunner = null; if (package.Metadata.Type == PackageType.Python) { scriptRunner = new PYScriptRunner(); } else if (package.Metadata.Type == PackageType.Lua) { scriptRunner = new LuaScriptRunner(); } else { throw new NotImplementedException($"Package type not supported: {package.Metadata.Type.ToString()}"); } var scriptGlobals = new ScriptGlobal { GameDirectory = PackageManager.GameDirectory, PackageDirectory = package.Path, Packages = packages, PluginManager = this, Versions = typeof(Versions) }; try { scriptRunner.CreateScope(scriptGlobals); scriptRunner.ExecuteScript(System.IO.Path.Combine(package.Path, package.Metadata.EntryPoint)); if (scriptRunner.Warnings.Any()) { scriptRunner.Warnings.ToList().ForEach(warning => Log.Warning(warning)); } } catch (Exception exception) { executionError = true; Log.Error($"Error while executing {package.Metadata.ToString()}"); if (scriptRunner.Errors.Any()) { scriptRunner.Errors.ToList().ForEach(error => Log.Error(error)); } else { Log.Exception(exception); } } }); if (executionError) { Log.Error("Please resolve issues and restart the game"); Console.ReadLine(); } else { Log.Info("Packages executed"); } if (alreadyStarted && gameClient != null) { OnClientHotReload?.Invoke(gameClient); } if (alreadyStarted && gameEditor != null) { OnEditorHotReload?.Invoke(gameEditor); } if (alreadyStarted && gameMenu != null) { OnMenuHotReload?.Invoke(gameMenu); } if (alreadyStarted && gameServer != null) { OnServerHotReload?.Invoke(gameServer); } } catch (Exception exception) { Log.Error($"Error while starting {nameof(PluginLoader)}"); Sentry.Exception(exception); } }