public CrewProgressionManager(MessageBroker aBroker, List <Account> accountList, CrewProgressionManagerSettings settings)
        {
            log(() => $"***INITIALIZE CPM");

            broker        = aBroker;
            this.settings = settings;
            ccm           = new ChatCommandManager(generateInitialChatCommands());
            this.verbose  = settings.verbose;

            log(() => $"***loading accounts: {Serializer.Serialize(accountList)}");
            log(() => $"***settings: {Serializer.Serialize(settings)}");

            this.accounts = new Dictionary <string, Account>();
            accountList.ForEach(SaveAccount);
            var playerIds = accountList
                            .Where(x => x.type == AccountType.Player)
                            .Select(x => int.Parse(x.id));

            initializedPlayerIds = new HashSet <int>(playerIds);

            log(() => $"***loaded with accounts: {Serializer.Serialize(this.accounts)}");
            this.NextCheckin = aBroker.GameAPI.Game_GetTickTime();
            CrewInfoTracker  = new Dictionary <int, CrewInfo>();


            actionManifest = new Dictionary <string, Action>()
            {
                { "Normalize Players", SimpleUpdate },
                { "Update Points", UpdateWithPointIncrement },
                { "Evaluate Research Teams", updateCrewResearchTeams },
                { "Save Accounts", () => Account.SaveAccountListToFile(this.accounts.Values.ToList(), "Content/Mods/CPM/accounts.json") }
            };

            EventList = generateEventList(settings.actions);
        }
        public void Game_Start(ModGameAPI dediAPI)
        {
            GameAPI = dediAPI;
            dediAPI.Console_Write("!!CREW PROGRESSION MOD LOADED!!");
            broker = new MessageBroker(dediAPI);
            var accounts = Account.AccountsFromFile("Content/Mods/CPM/accounts.json");

            settings = CrewProgressionManagerSettings.SettingsFromFile("Content/Mods/CPM/settings.json");
            GameAPI.Console_Write($"SETTINGS****: {Serializer.Serialize(settings)}");

            cpm = new CrewProgressionManager(broker, accounts, settings);

            ccm = new ChatCommandManager(cpm.generateInitialChatCommands());
        }