示例#1
0
        public static void ResetScripts_Command(CommandEventArgs e)
        {
            GumpFileMap = new Dictionary <string, string>();
            Gumps       = new Dictionary <string, UberGumpBase>();

            // should probably ensure all the timer stuff is restarted as appropriate
            UberScriptTimedScripts.ClearSubscriptions();

            List <XmlScript> deletedScripts = new List <XmlScript>();

            foreach (KeyValuePair <XmlScript, bool> scriptPair in XmlScript.AllScripts)
            {
                XmlScript script = scriptPair.Key;
                if (script.Deleted)
                {
                    deletedScripts.Add(script);
                    continue;
                }
                // hacky way to resubscribe the timers if at all possible
                XmlScript.TimerSubscriptionFlag temp = script.TimerSubscriptions;
                // unsubscribe them
                script.TimerSubscriptions = XmlScript.TimerSubscriptionFlag.None;
                // resubscribe them to what they were previously subscribed to
                script.TimerSubscriptions = temp;
            }
            foreach (XmlScript script in deletedScripts)
            {
                XmlScript.AllScripts.Remove(script);
            }
        }
示例#2
0
        public static void ResetScriptFile(string fileName, out string path)
        {
            ScriptFileMap.TryGetValue(fileName, out path);
            if (path == null)
            {
                path = Path.GetFullPath(Path.Combine(Core.BaseDirectory, ParsedScripts.UberScriptDirectory, fileName));

                if (!File.Exists(path))
                {
                    throw new UberScriptException("Script file did not exist at " + path);
                }
            }
            if (Scripts.ContainsKey(path))
            {
                Scripts.Remove(path);
            }
            foreach (KeyValuePair <string, string> filePair in ScriptFileMap)
            {
                foreach (KeyValuePair <XmlScript, bool> scriptPair in XmlScript.AllScripts)
                {
                    XmlScript script = scriptPair.Key;
                    if (ScriptFileMap.ContainsKey(script.ScriptFile) && ScriptFileMap[script.ScriptFile] == path)
                    {
                        // hacky way to resubscribe the timers if at all possible
                        XmlScript.TimerSubscriptionFlag temp = script.TimerSubscriptions;
                        // unsubscribe them
                        script.TimerSubscriptions = XmlScript.TimerSubscriptionFlag.None;
                        // resubscribe them to what they were previously subscribed to
                        script.TimerSubscriptions = temp;

                        script.UpdateScriptTriggerLookup();
                    }
                }
            }
        }
示例#3
0
        public static void SubscribeScript(XmlScript script, XmlScript.TimerSubscriptionFlag flags)
        {
            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.EveryTick) && !EveryTick.Contains(script))
            {
                EveryTick.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.TenMS) && !EveryTenMS.Contains(script))
            {
                EveryTenMS.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.TwentyFiveMS) && !EveryTwentyFiveMS.Contains(script))
            {
                EveryTwentyFiveMS.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.FiftyMS) && !EveryFiftyMS.Contains(script))
            {
                EveryFiftyMS.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.TwoFiftyMS) && !EveryTwoFiftyMS.Contains(script))
            {
                EveryTwoFiftyMS.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.OneSecond) && !EveryOneSecond.Contains(script))
            {
                EveryOneSecond.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.FiveSeconds) && !EveryFiveSeconds.Contains(script))
            {
                EveryFiveSeconds.Add(script);
            }

            if (flags.HasFlag(XmlScript.TimerSubscriptionFlag.OneMinute) && !EveryOneMinute.Contains(script))
            {
                EveryOneMinute.Add(script);
            }
        }
示例#4
0
        public static void ResetScripts_Command(CommandEventArgs e)
        {
            // first reset the gumps
            ParsedGumps.GumpFileMap = new Dictionary <string, string>();
            ParsedGumps.Gumps       = new Dictionary <string, UberGumpBase>();

            List <XmlScript> deletedScripts = new List <XmlScript>();

            if (e.Arguments.Length == 0)
            {
                ScriptFileMap = new Dictionary <string, string>();
                Scripts       = new Dictionary <string, RootNode>();

                // should probably ensure all the timer stuff is restarted as appropriate
                UberScriptTimedScripts.ClearSubscriptions();
                UberScriptFunctions.Methods.StopAllLineEffectTimers();
                UberScriptFunctions.Methods.StopAllLineScriptTimers();

                foreach (KeyValuePair <XmlScript, bool> scriptPair in XmlScript.AllScripts)
                {
                    XmlScript script = scriptPair.Key;
                    if (script.Deleted || script.AttachedTo == null || script.AttachedTo.Deleted)
                    {
                        deletedScripts.Add(script);
                        continue;
                    }
                    // hacky way to resubscribe the timers if at all possible
                    XmlScript.TimerSubscriptionFlag temp = script.TimerSubscriptions;
                    // unsubscribe them
                    script.TimerSubscriptions = XmlScript.TimerSubscriptionFlag.None;
                    // resubscribe them to what they were previously subscribed to
                    script.TimerSubscriptions = temp;

                    script.UpdateScriptTriggerLookup();
                }
                foreach (XmlScript script in deletedScripts)
                {
                    XmlScript.AllScripts.Remove(script);
                }
                if (e.Mobile != null)
                {
                    e.Mobile.SendMessage("All scripts have been reset.");
                }
            }
            else
            {
                try
                {
                    // first, always clear out deleted scripts
                    foreach (KeyValuePair <XmlScript, bool> scriptPair in XmlScript.AllScripts)
                    {
                        XmlScript script = scriptPair.Key;
                        if (script.Deleted)
                        {
                            deletedScripts.Add(script);
                            continue;
                        }
                    }
                    foreach (XmlScript script in deletedScripts)
                    {
                        XmlScript.AllScripts.Remove(script);
                    }

                    string fileName = e.Arguments[0].ToLower();
                    string path     = Path.GetFullPath(Path.Combine(Core.BaseDirectory, ParsedScripts.UberScriptDirectory, fileName));;

                    if (Directory.Exists(path))
                    {
                        // reset all uberscripts in that directory, allow to toggle subdirectory reset too
                        bool resetSubdirectories = (e.Arguments.Length > 1 && e.Arguments[1].ToLower() == "true");
                        foreach (string file in Directory.GetFiles(path, "*.*", resetSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly))
                        {
                            ResetScriptFile(file, out path);
                            e.Mobile.SendMessage("All scripts connected to " + path + " were reset.");
                        }
                        if (e.Mobile != null)
                        {
                            e.Mobile.SendMessage("All scripts INSIDE the DIRECTORY " + fileName + (resetSubdirectories ? " AND its SUBDIRECTORIES" : "") + " were reset.");
                        }
                    }
                    else
                    {
                        ResetScriptFile(fileName, out path);
                        if (e.Mobile != null)
                        {
                            e.Mobile.SendMessage("All scripts connected to " + path + " were reset.");
                        }
                    }
                }
                catch (Exception except)
                {
                    if (e.Mobile != null)
                    {
                        e.Mobile.SendMessage("Exception caught: " + except.Message);
                    }
                }
            }
        }