示例#1
0
        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;
        }
示例#2
0
 public override void CreateScope(ScriptGlobal scriptGlobal)
 {
     scope = ((ScriptEngine)getEngine()).Runtime.CreateScope();
     scope.SetVariable("Global", scriptGlobal);
 }
示例#3
0
        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);
            }
        }