// Token: 0x06000BF1 RID: 3057 RVA: 0x00054608 File Offset: 0x00052808
        public static Dictionary <string, PlayerFactionSelection> GetFactionOptions(LevelManager levelManager, DLCManager dlcManager, PlayerType playerType, bool useOwnedDLCOnly)
        {
            Dictionary <string, PlayerFactionSelection> dictionary = new Dictionary <string, PlayerFactionSelection>(6);

            if (levelManager != null)
            {
                CommanderAttributes[] commanderAttributes = levelManager.CommanderAttributes;
                if (commanderAttributes != null)
                {
                    for (int i = 0; i < commanderAttributes.Length; i++)
                    {
                        CommanderAttributes commanderAttributes2 = commanderAttributes[i];
                        string key = string.IsNullOrEmpty(commanderAttributes2.NameLocID) ? commanderAttributes2.Name : commanderAttributes2.NameLocID;
                        PlayerFactionSelection value = new PlayerFactionSelection((CustomizationFactionSetting)i, DLCPackID.kInvalidID, false);
                        dictionary.Add(key, value);
                    }
                }
            }
            if (dlcManager != null)
            {
                IEnumerable <DLCPackDescriptor> enumerable = useOwnedDLCOnly ? dlcManager.OwnedDLCPacks : dlcManager.AllDLCPacks;
                foreach (DLCPackDescriptor dlcpackDescriptor in enumerable)
                {
                    if (dlcpackDescriptor.DLCPackType == DLCType.Faction)
                    {
                        UnitFactionDLCPack unitFactionDLCPack = (UnitFactionDLCPack)dlcManager.GetDLCPackHeader(dlcpackDescriptor.DLCPackID);
                        if (!(unitFactionDLCPack == null))
                        {
                            if (playerType == PlayerType.AI)
                            {
                                CommanderAttributesData commanderAttributesData = unitFactionDLCPack.CommanderAttrs as CommanderAttributesData;
                                if (commanderAttributesData == null || commanderAttributesData.AIArchetypeAssets.IsNullOrEmpty <AIArchetypeAttributesAsset>())
                                {
                                    continue;
                                }
                            }
                            string dlcpackLocID           = dlcpackDescriptor.DLCPackLocID;
                            PlayerFactionSelection value2 = new PlayerFactionSelection(unitFactionDLCPack.CustomizesFaction, dlcpackDescriptor.DLCPackID, false);
                            dictionary.Add(dlcpackLocID, value2);
                        }
                    }
                }
            }
            PlayerFactionSelection value3 = new PlayerFactionSelection(CustomizationFactionSetting.Coalition, DLCPackID.kInvalidID, true);

            // MOD
            if (playerType == PlayerType.AI)
            {
                dictionary.Remove("SPECTATOR");
                dictionary.Remove("FATHERSHIP");
                dictionary.Remove("NONE");
            }
            // MOD
            dictionary.Add("ID_UI_FE_MP_RANDOM_253", value3);
            return(dictionary);
        }
        // Token: 0x060015BD RID: 5565 RVA: 0x000790FC File Offset: 0x000772FC
        private void ResetEntityManager()
        {
            ShipbreakersMain.sEntityTypes.Clear();
            ShipbreakersMain.sEntityTypes = null;
            ShipbreakersMain.EntitySystem.Teardown();
            HashSet <ScriptableObject> hashSet = new HashSet <ScriptableObject>();

            foreach (DLCAssetBundleBase dlcassetBundleBase in ShipbreakersMain.sDLCManager.GetAllLoadedHeadersOfType(DLCType.Faction))
            {
                UnitFactionDLCPack unitFactionDLCPack = dlcassetBundleBase as UnitFactionDLCPack;
                if (unitFactionDLCPack != null)
                {
                    foreach (UnitFactionDLCPack.ReplacementMapping replacementMapping in unitFactionDLCPack.NewEntities)
                    {
                        if (replacementMapping.NewEntityType is IEntityTypeRegistrationRequired)
                        {
                            hashSet.Add(replacementMapping.NewEntityType);
                        }
                    }
                    CommanderAttributesData commanderAttributesData = unitFactionDLCPack.CommanderAttrs as CommanderAttributesData;
                    if (commanderAttributesData != null)
                    {
                        FactionAttributesData factionAttributesData = commanderAttributesData.FactionAttributes.Data as FactionAttributesData;
                        if (factionAttributesData != null)
                        {
                            ScriptableObject techTree = factionAttributesData.TechTree;
                            if (techTree != null)
                            {
                                hashSet.Add(techTree);
                            }
                        }
                    }
                }
            }
            ShipbreakersMain.InitializeEntityManager(this.m_RegistryAsset, hashSet);

            // MOD: Load unit stat mods using subsystem
            if (MapModManager.GameType != GameMode.SinglePlayer)
            {
                new AttributeLoader().LoadAttributes(ShipbreakersMain.sEntityTypes, "Managed/fathership.json");                 // Default game-wide fathership modifications
            }
            new AttributeLoader().LoadAttributes(ShipbreakersMain.sEntityTypes);
            // MOD
        }