private void Add_Error(string format, params object[] args)
        {
            string str = DebugHud.Format_Log(format, 1, args);

            Errors.Add(str);
            SLog.Info("[ <b>{0}</b> ] {1}", this.dll_name, str);
            onError?.Invoke();
        }
Exemple #2
0
        public static string Format_Log(string format, int stack_offset = 0, params object[] args)
        {
            StackFrame frame = new StackFrame(1 + stack_offset, true);
            string     meth  = frame.GetMethod().ReflectedType.FullName;
            string     funct = frame.GetMethod().Name;
            int        line  = frame.GetFileLineNumber();

            string str = String.Format(format, args);

            str = DebugHud.Tag_String(String.Format("{0}  [Function: {1}::{2} @ Line: {3}]", str, meth, funct, line), 1);

            return(str);
        }
Exemple #3
0
        public static string Format_Exception_Log(Exception ex, int stack_offset = 0)
        {
            string str = null;

            try
            {
                //string trace = new StackTrace(ex, 1 + stack_offset, true).ToString();
                string trace = StackTraceUtility.ExtractStringFromException(ex);
                str = String.Format("{0}\n{1}", ex.Message, trace);
            }
            catch (Exception e)
            {
                write_log("DebugHUD.Format_Exception_Log() THREW AN INTERNAL EXCEPTION!\n{0}\n{1}", e.Message, e.StackTrace);
                str = String.Format("{0}\n{1}", ex.Message, StackTraceUtility.ExtractStackTrace());
            }

            if (ex.InnerException != null)
            {
                str = String.Format("{0}\n{1}", str, ex.InnerException.Message);
            }

            return(DebugHud.Format_Log(str, 2 + stack_offset));//reformat our exception string with an additional stack offset of 1 to make it skip past the function that called THIS format function.
            //return DebugHud.Tag_String(str, stack_offset);
        }
        public static void init(string hash)
        {
            lock (locker)
            {
                if (Loader.Config != null)
                {
                    return;
                }
                //Application.stackTraceLogType = StackTraceLogType.Full;
                Logging.Logger.Begin(Path.Combine(Application.dataPath, "plugins.log"));

                Stopwatch timer = new Stopwatch();
                timer.Start();

                if (!Loader.Load_Config_Stream())
                {
                    return;
                }

                try
                {
                    DebugHud.Init();
                    TextureHelper.Setup();
                    MaterialHelper.Setup();
                    SiscosHooks.Setup();
                    PluginLoader_Watermark.Setup();
                    MainMenu.Setup();
                    DebugUI.Setup();

                    Setup_Update_Helper();
                    bool ok = Verify_PluginLoader_Hash(hash);
                    if (!ok)
                    {
                        return;
                    }

                    IN_LOADING_PHASE = true;
                    Setup_Plugin_Dir();

                    Check_For_Updates();

                    Setup_Assembly_Resolver();
                    Upgrades.Setup();
                    Assemble_Plugin_List();
                    Load_Config();
                    IN_LOADING_PHASE = false;
                    ResourceExt.map_SR_Icons();

                    plugin_updater = uiControl.Create <Plugin_Update_Viewer>();// This control manages itself and is only able to become visible under certain conditions which it will control. Therefore it needs no var to track it.
                    plugin_updater.Show();

                    dev_tools = uiControl.Create <DevMenu>();
                    //dev_tools.Show();
                    //dev_tools.onShown += (uiWindow w) => { GameTime.Pause(); };
                    //dev_tools.onHidden += (uiWindow w) => { GameTime.Unpause(); };

                    //Misc_Experiments.Find_Common_Classes_For_Idents(new HashSet<Identifiable.Id> { Identifiable.Id.PINK_RAD_LARGO });
                }
                catch (Exception ex)
                {
                    SLog.Error("Exception during PluginLoader initialization!");
                    SLog.Error(ex);
                }
                finally
                {
                    timer.Stop();
                    SLog.Debug("Plugin Loader initialized! Took: {0}ms", timer.ElapsedMilliseconds);
                }
            }
        }
        public static _hook_result call(HOOK_ID hook, object sender, ref object returnValue, object[] args)
        {
            try
            {
#if DEBUG
                SLog.Info("[SiscosHooks] {0}({1})", hook, Get_Arg_String(args));
#endif

                _hook_result result = new _hook_result(args);
                Dictionary <HookUID, Sisco_Hook_Delegate> cb_list;
                bool r = Events.TryGetValue((HOOK_ID)hook, out cb_list);
                if (r == false)
                {
                    return(new _hook_result());           //no abort
                }
                List <HookUID> TRASH = null;

                foreach (KeyValuePair <HookUID, Sisco_Hook_Delegate> kvp in cb_list)
                {
                    try
                    {
                        HookUID UID = kvp.Key;
                        UID.hasFired = true;

                        Sisco_Hook_Delegate act = kvp.Value;
                        if (act == null)
                        {
                            continue;
                        }
                        Sisco_Return ret = act(ref sender, ref result.args, ref returnValue);
                        // If this hook is a singleuse hook then we need to put it in our trashbin so we know to unregister it at the end of this function.
                        if (UID.SingleUse)
                        {
                            if (TRASH == null)
                            {
                                TRASH = new List <HookUID>();
                            }
                            TRASH.Add(UID);
                        }

                        if (ret != null)
                        {
                            if (ret.early_return)
                            {
                                result.abort = true;
                            }
                            if (ret.handled == true)
                            {
                                result.handled = true;
                                break;//cancel all other events
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log(hook, ex.Message);
                        Log(ex.StackTrace);
                    }
                }

                if (TRASH != null)
                {
                    foreach (HookUID uid in TRASH)
                    {
                        try { unregister(uid); } catch (Exception ex) { Log(uid.hook, DebugHud.Format_Exception_Log(ex)); }
                    }
                }

                if (result == null)
                {
                    Log(hook, "Result became NULL somehow!");
                    return(new _hook_result());// we MUST return something other then NULL or the whole game can screw up!
                }

                if (args != null && args.Length != result.args.Length)
                {
                    Log(hook, "The size of Result.args does not match the number of arguments recieved from the function!");
                }

                return(result);
            }
            catch (Exception ex)
            {
                Log(hook, ex.Message);
                Log(ex.StackTrace);
                return(new _hook_result());
            }

            return(new _hook_result());//no abort
        }
Exemple #6
0
        public static void Log(Exception ex)
        {
            string str = DebugHud.Format_Exception_Log(ex, 1);

            DebugHud.Add_Line(str, true);
        }
Exemple #7
0
        public static void Log(string format, params object[] args)
        {
            string str = DebugHud.Tag_String(String.Format(format, args), 1);

            DebugHud.Add_Line(str);
        }
Exemple #8
0
        public static void Log(string format)
        {
            string str = DebugHud.Tag_String(format, 1);

            DebugHud.Add_Line(str);
        }
Exemple #9
0
        public static void LogSilent(Exception ex)
        {
            string str = DebugHud.Format_Exception_Log(ex, 0);

            DebugHud.write_log(str);
        }
Exemple #10
0
 public static void LogSilent(string str)
 {
     DebugHud.write_log(str);
 }
Exemple #11
0
        public static void LogSilent(string format, params object[] args)
        {
            string str = DebugHud.Format_Log(format, 1, args);

            DebugHud.write_log(str);
        }