public static void UpdateArea(this GameManagerAccounts.LevelAreaList list, int LevelArea, GameManagerAccounts Account)
        {
            // Send Data from Current Area to Previous Area

            if (Account.GameData().AreaLevels.ContainsKey(LevelArea)) // Current Area already exists, update its information
            {
                GameManagerData.AreaList AreaList = Account.GameData().AreaLevels[LevelArea];

                AreaList.ExperienceData = new GameManagerAccounts.LevelAreaList.Experience
                {
                    XPGained = AreaList.ExperienceData.XPGained + list.ExperienceData.XPGained
                };

                HashSet <int> NewList = AreaList.Items;
                NewList.UnionWith(list.Items);

                AreaList.Items = NewList;
                AreaList.Timer = list.Timer;
            }

            else // New area, not been here before
            {
                Account.GameData().AreaLevels.Add(LevelArea, new GameManagerData.AreaList
                {
                    Items = list.Items,
                    Timer = list.Timer,

                    ExperienceData = new GameManagerAccounts.LevelAreaList.Experience
                    {
                        XPGained = list.ExperienceData.XPGained
                    },
                });
            }
        }
        public static void UpdateNewArea(this GameManagerAccounts.LevelAreaList list, int LevelArea, GameManagerAccounts Account)
        {
            if (Account.GameData().AreaLevels.ContainsKey(LevelArea)) // Current Area already exists, update its information
            {
                GameManagerData.AreaList AreaList = Account.GameData().AreaLevels[LevelArea];

                list.Timer          = AreaList.Timer;
                list.ExperienceData = AreaList.ExperienceData;
                list.Items          = AreaList.Items;
            }

            else
            {
                list.Timer = 0;
                //list.Monsters = new List<Helpers.IMap.IMapActor>{ };
                list.Items          = new HashSet <int>();
                list.ExperienceData = new GameManagerAccounts.LevelAreaList.Experience();
            }
        }
        public void CreateThread()
        {
            try
            {
                MainThread = new Thread(() =>
                {
                    try
                    {
                        Enigma.D3.Engine.Current                         = Account.DiabloIII;
                        GameManagerAccountHelper.Current                 = Account;
                        GameManagerAccountHelper.CurrentData             = Account.GameData();
                        GameManagerAccountHelper.Current.LevelAreaHelper = new LevelAreaHelper();

                        if (Account.MainAccount)
                        {
                            CreateUI();
                        }

                        do
                        {
                            lock (ActionLock)
                            {
                                foreach (Action i in Action)
                                {
                                    i.Invoke();
                                }
                            }
                            WaitHandle.WaitOne();
                        }while (!Account.DiabloIII.Process.HasExited && !ExitFlag);
                        Suspend();
                    }
                    catch (Exception f)
                    {
                        DebugWriter.Write(f);
                    }
                });

                MainThread.IsBackground = true;
            }

            catch (Exception e)
            {
                DebugWriter.Write(e);
            }
        }