コード例 #1
0
ファイル: World.cs プロジェクト: zerodowned/genovaproject-1
        public static void Save(bool message)
        {
            if (m_Saving || AsyncWriter.ThreadCount > 0)
            {
                return;
            }

            NetState.FlushAll();
            NetState.Pause();

            m_Saving = true;

            if (message)
            {
                Broadcast(0x35, true, "The world is saving, please wait.");
            }

            SaveStrategy strategy = SaveStrategy.Acquire();

            Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLowerInvariant());

            Console.Write("World: Saving...");

            Stopwatch watch = Stopwatch.StartNew();

            if (!Directory.Exists("Saves/Mobiles/"))
            {
                Directory.CreateDirectory("Saves/Mobiles/");
            }
            if (!Directory.Exists("Saves/Items/"))
            {
                Directory.CreateDirectory("Saves/Items/");
            }
            if (!Directory.Exists("Saves/Guilds/"))
            {
                Directory.CreateDirectory("Saves/Guilds/");
            }


            /*using ( SaveMetrics metrics = new SaveMetrics() ) {*/
            strategy.Save(null);
            /*}*/

            try {
                EventSink.InvokeWorldSave(new WorldSaveEventArgs(message));
            } catch (Exception e) {
                throw new Exception("World Save event threw an exception.  Save failed!", e);
            }

            watch.Stop();

            m_Saving = false;

            ProcessSafetyQueues();

            strategy.ProcessDecay();

            Console.WriteLine("done in {0:F2} seconds.", watch.Elapsed.TotalSeconds);

            // Genova: confirmar personagens não confirmados.
            ControladorODBC.ODBCConfirmarPersonagensNaoConfirmados();

            if (message)
            {
                Broadcast(0x35, true, "World save complete. The entire process took {0:F1} seconds.", watch.Elapsed.TotalSeconds);
            }

            NetState.Resume();
        }