예제 #1
0
        static void Step()
        {
            DropLimiter limiter = null;

            try
            {
            limiter = new DropLimiter();
            }
            catch (StateNotFoundException)
            {
            Console.WriteLine("No previous state file found, exiting " +
                              "without doing any drops. This is not an " +
                              "error, it is expected for the first run.");
            return;
            }

            limiter.Logger.Writers.Add(new ConsoleLogWriter());

            if (limiter.Config.ContainsKey("Log"))
            limiter.Logger.Writers.Add(
                new FileLogWriter(limiter.Config["Log"]));

            if (limiter.Config.ContainsKey("Report"))
            limiter.Report = new CsvReport(limiter.Config["Report"]);

            switch (limiter.Config.DatabasePatch)
            {
            case "auto":
            if (!DBPatch.IsInstalled(limiter.GameDB))
                DBPatch.Install(limiter.GameDB);

            break;

            case "prompt":
            if (!DBPatch.IsInstalled(limiter.GameDB))
            {
                Console.Write("rm-drop-limiter database patch not " +
                              "detected. Install now (y/n) ? ");

                if (Console.ReadLine().Trim().ToLower() != "y")
                    break;

                DBPatch.Install(limiter.GameDB);
            }

            break;

            case "disabled":
            if (DBPatch.IsInstalled(limiter.GameDB))
                DBPatch.Uninstall(limiter.GameDB);

            break;

            default:
            Console.WriteLine("In .conf file, DatabasePatch is set to [" +
                              limiter.Config.DatabasePatch + "], which is " +
                              "unrecognized. Exiting.");
            return;
            }

            var drops = new Drops();

            var newdrops = limiter.Run(drops);

            limiter.State.Save();

            foreach (var item in newdrops.Keys)
            Console.WriteLine("{0}: spawning {1} more.",
                              drops.FindByItemIndex(item).Description,
                              newdrops[item]);

            if (newdrops.Count > 0)
            limiter.GameDB.IncrementLimits(newdrops);
        }