ACR_Candlekeep.Archivist.InitializeArchives C# (CSharp) Метод

InitializeArchives() публичный Метод

public InitializeArchives ( object Sender, EventArgs e ) : void
Sender object
e System.EventArgs
Результат void
        public void InitializeArchives(object Sender, EventArgs e)
        {
            // TODO: Allow this to be configured.
            try
            {
                Archivist.debug += "\nAttempting to make a new ResourceManager";
                manager = new ALFA.ResourceManager(null);
                LoadModuleProperties();

                Archivist.debug += "\nAttempting to open the default talk table";
                dialog = new OEIShared.IO.TalkTable.TalkTable();
                dialog.Open(OEIShared.Utils.BWLanguages.BWLanguage.English);

                Archivist.debug += "\nAttempting to open the custom talk table";
                if (!String.IsNullOrEmpty(customTlkFileName))
                {
                    customTlk = new OEIShared.IO.TalkTable.TalkTable();
                    customTlk.OpenCustom(OEIShared.Utils.BWLanguages.BWLanguage.English, customTlkFileName);
                }

                tlkLoaded = true;

                Archivist.debug += "\nInitializing ALFA.Shared collections";
                ALFA.Shared.Modules.InfoStore.ModuleItems = new Dictionary<string, ALFA.Shared.ItemResource>();
                ALFA.Shared.Modules.InfoStore.ModuleCreatures = new Dictionary<string, ALFA.Shared.CreatureResource>();
                ALFA.Shared.Modules.InfoStore.ModulePlaceables = new Dictionary<string, ALFA.Shared.PlaceableResource>();
                ALFA.Shared.Modules.InfoStore.ModuleWaypoints = new Dictionary<string, ALFA.Shared.WaypointResource>();
                ALFA.Shared.Modules.InfoStore.ModuleFactions = new Dictionary<int, ALFA.Shared.Faction>();
                ALFA.Shared.Modules.InfoStore.ModuleVisualEffects = new Dictionary<string, ALFA.Shared.VisualEffectResource>();
                ALFA.Shared.Modules.InfoStore.ModuleLights = new Dictionary<string, ALFA.Shared.LightResource>();
                ALFA.Shared.Modules.InfoStore.ModuleTraps = new Dictionary<string, ALFA.Shared.TrapResource>();

                ALFA.Shared.Modules.InfoStore.SpawnedTrapTriggers = new Dictionary<string, ALFA.Shared.ActiveTrap>();
                ALFA.Shared.Modules.InfoStore.SpawnedTrapDetect = new Dictionary<string, ALFA.Shared.ActiveTrap>();

                ALFA.Shared.Modules.InfoStore.ModifiedGff = new Dictionary<string, GFFFile>();

                ALFA.Shared.Modules.InfoStore.AreaNames = new Dictionary<string,string>();

                Archivist.debug += "\nInitializing standard factions";
                List<int> factionIndex = new List<int>();
                factionIndex.Add(0); // Player
                factionIndex.Add(1); // Hostile
                factionIndex.Add(2); // Commoner
                factionIndex.Add(3); // Merchant
                factionIndex.Add(4); // Defender

                // The damage-doing traps from the original campaign, converted to
                // our purposes.
                Archivist.debug += "\nAdding standard traps";
                AddStandardTraps();

                #region Caching Information about All Items
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTI))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleItems.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            // If we have competing resources, we expect that GetResourcesByType will give us the
                            // resource of greatest priority first. Therefore, redundant entries of a given resref
                            // are trash.
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        ALFA.Shared.ItemResource addingItem = new ALFA.Shared.ItemResource();
                        addingItem.ResourceName = resource.FullName.Split('.')[0].ToLower();
                        try
                        {
                            addingItem.LocalizedName = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingItem.LocalizedName = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString();
                        }
                        if (addingItem.LocalizedName == "")
                        {
                            addingItem.LocalizedName = GetTlkEntry(currentGFF.TopLevelStruct["LocalizedName"].ValueCExoLocString.StringRef);
                        }

                        // Might be a talk table reference. Let's see...
                        if (addingItem.LocalizedName.Contains('{') && addingItem.LocalizedName.Contains('}'))
                        {
                            string attemptingName = GffStoreToTlk(addingItem.LocalizedName);
                            if (attemptingName != "") addingItem.LocalizedName = attemptingName;
                        }

                        addingItem.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());

                        addingItem.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();
                        addingItem.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();

                        int Cost, CostModify, BaseItem;
                        bool Cursed = false, Plot = false, Stolen = false;
                        Int32.TryParse(currentGFF.TopLevelStruct["Cost"].Value.ToString(), out Cost);
                        Int32.TryParse(currentGFF.TopLevelStruct["ModifyCost"].Value.ToString(), out CostModify);
                        Int32.TryParse(currentGFF.TopLevelStruct["BaseItem"].Value.ToString(), out BaseItem);
                        if (currentGFF.TopLevelStruct["Cursed"].Value.ToString() == "1") Cursed = true;
                        if (currentGFF.TopLevelStruct["Plot"].Value.ToString() == "1") Plot = true;
                        if (currentGFF.TopLevelStruct["Stolen"].Value.ToString() == "1") Stolen = true;

                        addingItem.Cost = Cost + CostModify;
                        addingItem.BaseItem = BaseItem;
                        addingItem.Cursed = Cursed;
                        addingItem.Plot = Plot;
                        addingItem.Stolen = Stolen;

                        addingItem.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModuleItems.Add(addingItem.ResourceName, addingItem);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Caching Information about All Creatures
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTC))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleCreatures.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        ALFA.Shared.CreatureResource addingCreature = new ALFA.Shared.CreatureResource();

                        addingCreature.ResourceName = resource.FullName.Split('.')[0].ToLower();
                        try
                        {
                            addingCreature.FirstName = currentGFF.TopLevelStruct["FirstName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingCreature.FirstName = currentGFF.TopLevelStruct["FirstName"].Value.ToString();
                        }
                        if (addingCreature.FirstName == "")
                        {
                            addingCreature.FirstName = GetTlkEntry(currentGFF.TopLevelStruct["FirstName"].ValueCExoLocString.StringRef);
                        }

                        try
                        {
                            addingCreature.LastName = currentGFF.TopLevelStruct["LastName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingCreature.LastName = currentGFF.TopLevelStruct["LastName"].Value.ToString();
                        }
                        if (addingCreature.LastName == "")
                        {
                            addingCreature.LastName = GetTlkEntry(currentGFF.TopLevelStruct["LastName"].ValueCExoLocString.StringRef);
                        }

                        addingCreature.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());

                        addingCreature.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();
                        addingCreature.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();

                        if (currentGFF.TopLevelStruct["IsImmortal"].Value.ToString() == "0")
                            addingCreature.IsImmortal = false;
                        else
                            addingCreature.IsImmortal = true;

                        float calculatedCR = 0.0f;
                        if (float.TryParse(currentGFF.TopLevelStruct["ChallengeRating"].Value.ToString(), out calculatedCR))
                        {
                            addingCreature.ChallengeRating = calculatedCR;
                        }

                        int faction;
                        if (Int32.TryParse(currentGFF.TopLevelStruct["FactionID"].Value.ToString(), out faction))
                        {
                            addingCreature.FactionID = faction;
                            if (!factionIndex.Contains(faction)) factionIndex.Add(faction);
                        }

                        int LawChaos;
                        if (Int32.TryParse(currentGFF.TopLevelStruct["LawfulChaotic"].Value.ToString(), out LawChaos))
                        {
                            addingCreature.LawfulChaotic = LawChaos;
                        }

                        int GoodEvil;
                        if (Int32.TryParse(currentGFF.TopLevelStruct["GoodEvil"].Value.ToString(), out GoodEvil))
                        {
                            addingCreature.GoodEvil = GoodEvil;
                        }

                        string AlignSummary;
                        if (GoodEvil < 31) AlignSummary = "E";
                        else if (GoodEvil < 70) AlignSummary = "N";
                        else AlignSummary = "G";

                        if (LawChaos < 31) AlignSummary = "C" + AlignSummary;
                        else if (LawChaos < 70 && AlignSummary == "N") AlignSummary = "TN";
                        else if (LawChaos < 70) AlignSummary = "N" + AlignSummary;
                        else AlignSummary = "L" + AlignSummary;

                        addingCreature.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModuleCreatures.Add(addingCreature.ResourceName, addingCreature);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Caching Information about All Placeables
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTP))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleCreatures.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        ALFA.Shared.PlaceableResource addingPlaceable = new ALFA.Shared.PlaceableResource();
                        addingPlaceable.ResourceName = resource.FullName.Split('.')[0].ToLower();
                        try
                        {
                            addingPlaceable.Name = currentGFF.TopLevelStruct["LocName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingPlaceable.Name = currentGFF.TopLevelStruct["LocName"].Value.ToString();
                        }
                        if (addingPlaceable.Name == "")
                        {
                            addingPlaceable.Name = GetTlkEntry(currentGFF.TopLevelStruct["LocName"].ValueCExoLocString.StringRef);
                        }

                        addingPlaceable.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());

                        addingPlaceable.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();
                        addingPlaceable.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();
                        addingPlaceable.Useable = currentGFF.TopLevelStruct["Useable"].Value.ToString() != "0";
                        addingPlaceable.HasInventory = currentGFF.TopLevelStruct["HasInventory"].ValueByte != 0;
                        addingPlaceable.Trapped = currentGFF.TopLevelStruct["TrapFlag"].ValueByte != 0;
                        addingPlaceable.Locked = currentGFF.TopLevelStruct["Locked"].ValueByte != 0;

                        addingPlaceable.TrapDetectDC = currentGFF.TopLevelStruct["TrapDetectDC"].ValueInt;
                        addingPlaceable.TrapDisarmDC = currentGFF.TopLevelStruct["DisarmDC"].ValueInt;                        
                        addingPlaceable.LockDC = currentGFF.TopLevelStruct["OpenLockDC"].ValueInt;

                        addingPlaceable.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModulePlaceables.Add(addingPlaceable.ResourceName, addingPlaceable);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Caching Information about Factions
                factionIndex.Sort();
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResFAC))
                {
                    try
                    {
                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);

                        int count = 0;
                        foreach (GFFStruct field in currentGFF.TopLevelStruct["FactionList"].ValueList.StructList)
                        {
                            ALFA.Shared.Faction addingFaction = new ALFA.Shared.Faction();
                            addingFaction.Name = field.GetFieldSafe("FactionName").Value.ToString();
                            ALFA.Shared.Modules.InfoStore.ModuleFactions.Add(factionIndex[count], addingFaction);
                            count++;
                        }

                        // If there are multiple .FAC resources, we only care about the one that gets priority.
                        if (ALFA.Shared.Modules.InfoStore.ModuleFactions.Count > 0) break;
                    }
                    catch { }
                }
                #endregion

                #region Caching Information about Waypoints
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTW))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleWaypoints.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        GFFStructCollection variables = currentGFF.TopLevelStruct["VarTable"].ValueList.StructList;
                        if (variables.Count > 0)
                        {
                            bool nonWaypoint = false;
                            // Waypoints can be a lot of things. Let's see if we can figure anything out about this one.
                            foreach (GFFStruct var in variables)
                            {
                                if (var["Name"].Value.ToString() == "ACR_TRAP_TRIGGER_AREA")
                                {
                                    // This is a trap. We should process as one.
                                    ParseTrapWaypoint(currentGFF, currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString());
                                    nonWaypoint = true;
                                    break;
                                }
                            }
                            if (nonWaypoint)
                            {
                                continue;
                            }
                        }

                        ALFA.Shared.WaypointResource addingWaypoint = new ALFA.Shared.WaypointResource();
                        addingWaypoint.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();
                        addingWaypoint.ResourceName = resource.FullName.Split('.')[0].ToLower();

                        try
                        {
                            addingWaypoint.Name = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingWaypoint.Name = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString();
                        }
                        if (addingWaypoint.Name == "")
                        {
                            addingWaypoint.Name = GetTlkEntry(currentGFF.TopLevelStruct["LocalizedName"].ValueCExoLocString.StringRef);
                        }
                        
                        addingWaypoint.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());
                        addingWaypoint.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();

                        addingWaypoint.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModuleWaypoints.Add(addingWaypoint.ResourceName, addingWaypoint);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Caching Information about Visual Effects
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUPE))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleCreatures.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        ALFA.Shared.VisualEffectResource addingVisual = new ALFA.Shared.VisualEffectResource();

                        addingVisual.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();
                        addingVisual.ResourceName = resource.FullName.Split('.')[0].ToLower();
                        try
                        {
                            addingVisual.Name = currentGFF.TopLevelStruct["LocName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingVisual.Name = currentGFF.TopLevelStruct["LocName"].Value.ToString();
                        }
                        if (addingVisual.Name == "")
                        {
                            addingVisual.Name = GetTlkEntry(currentGFF.TopLevelStruct["LocName"].ValueCExoLocString.StringRef);
                        }

                        addingVisual.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());
                        addingVisual.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();

                        addingVisual.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModuleVisualEffects.Add(addingVisual.ResourceName, addingVisual);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Caching Information about Lights
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResULT))
                {
                    try
                    {
                        if (ALFA.Shared.Modules.InfoStore.ModuleCreatures.Keys.Contains(resource.FullName.Split('.')[0].ToLower()))
                        {
                            continue;
                        }

                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        ALFA.Shared.LightResource addingLight = new ALFA.Shared.LightResource();
                        addingLight.ResourceName = resource.FullName.Split('.')[0].ToLower();
                        addingLight.TemplateResRef = currentGFF.TopLevelStruct["TemplateResRef"].Value.ToString();

                        try
                        {
                            addingLight.Name = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString().Split('"')[1];
                        }
                        catch
                        {
                            addingLight.Name = currentGFF.TopLevelStruct["LocalizedName"].Value.ToString();
                        }
                        if (addingLight.Name == "")
                        {
                            addingLight.Name = GetTlkEntry(currentGFF.TopLevelStruct["LocalizedName"].ValueCExoLocString.StringRef);
                        }

                        addingLight.Classification = ParseClassification(currentGFF.TopLevelStruct["Classification"].Value.ToString());
                        addingLight.Tag = currentGFF.TopLevelStruct["Tag"].Value.ToString();

                        addingLight.LightRange = currentGFF.TopLevelStruct["Range"].ValueFloat;
                        addingLight.LightIntensity = currentGFF.TopLevelStruct["Light"].ValueStruct["Intensity"].ValueFloat;
                        addingLight.ShadowIntensity = currentGFF.TopLevelStruct["ShadowIntensity"].ValueFloat * 100;

                        addingLight.ConfigureDisplayName();

                        ALFA.Shared.Modules.InfoStore.ModuleLights.Add(addingLight.ResourceName, addingLight);
                    }
                    catch 
                    {
                        Archivist.debug += String.Format("\n {0}", resource.FullName);
                    }
                }
                #endregion

                #region Gathering Information from 2da Files
                try
                {
                    OEIShared.IO.TwoDA.TwoDAFile twoda = manager.OpenTwoDAResource(manager.GetResource("spells", ALFA.ResourceManager.Res2DA).ResRef.Value, ALFA.ResourceManager.Res2DA);
                    ALFA.Shared.Modules.InfoStore.CoreSpells = new List<ALFA.Shared.Spell>(twoda.RowCount);
                    var ColumnFields = ALFA.Shared.TwoDAReader.GetColumnFieldInfo(typeof(ALFA.Shared.Spell));
                    for (int row = 0; row < twoda.RowCount; row++)
                    {
                        ALFA.Shared.Spell spell = ALFA.Shared.TwoDAReader.Read2DARow<ALFA.Shared.Spell>(twoda, row, ColumnFields);
                        int parseholder = 0;

                        if (spell.Name == null)
                            spell.Name = twoda["Label"][row];

                        if (spell.Name == "" ||
                            spell.Name == "padding" ||
                            spell.Name == "PADDING" ||
                            spell.Name == "PADDING_PERSONAL_VFX")
                        {
                            // This line is padding.
                            ALFA.Shared.Modules.InfoStore.CoreSpells.Add(null);
                            continue;
                        }

                        spell.SubSpells = new List<int>();
                        if (int.TryParse(twoda["SubRadSpell1"][row], out parseholder))
                            spell.SubSpells.Add(parseholder);
                        if (int.TryParse(twoda["SubRadSpell2"][row], out parseholder))
                            spell.SubSpells.Add(parseholder);
                        if (int.TryParse(twoda["SubRadSpell3"][row], out parseholder))
                            spell.SubSpells.Add(parseholder);
                        if (int.TryParse(twoda["SubRadSpell4"][row], out parseholder))
                            spell.SubSpells.Add(parseholder);
                        if (int.TryParse(twoda["SubRadSpell5"][row], out parseholder))
                            spell.SubSpells.Add(parseholder);

                        spell.CounterSpells = new List<int>();
                        if (int.TryParse(twoda["Counter1"][row], out parseholder))
                            spell.CounterSpells.Add(parseholder);
                        if (int.TryParse(twoda["Counter2"][row], out parseholder))
                            spell.CounterSpells.Add(parseholder);

                        ALFA.Shared.Modules.InfoStore.CoreSpells.Add(spell);
                    }
                }
                catch (Exception ex)
                {
                    Archivist.debug += "\n spells.2da error: " + ex.Message + "\n" + ex.StackTrace;
                }
                try
                {
                    OEIShared.IO.TwoDA.TwoDAFile twoda = manager.OpenTwoDAResource(manager.GetResource("iprp_spells", ALFA.ResourceManager.Res2DA).ResRef.Value, ALFA.ResourceManager.Res2DA);
                    ALFA.Shared.Modules.InfoStore.IPCastSpells = new List<ALFA.Shared.SpellCastItemProperties>(twoda.RowCount);
                    var ColumnFields = ALFA.Shared.TwoDAReader.GetColumnFieldInfo(typeof(ALFA.Shared.SpellCastItemProperties));
                    for (int row = 0; row < twoda.RowCount; row++)
                    {
                        ALFA.Shared.SpellCastItemProperties ip = ALFA.Shared.TwoDAReader.Read2DARow<ALFA.Shared.SpellCastItemProperties>(twoda, row, ColumnFields);
                        int parseholder = 0;

                        if (ip.Name == null)
                            ip.Name = twoda["Label"][row];

                        if (ip.Name == "" ||
                            ip.Name == "padding" ||
                            ip.Name == "PADDING" ||
                            ip.Name == "PADDING_PERSONAL_VFX")
                        {
                            // This line is padding.
                            ALFA.Shared.Modules.InfoStore.IPCastSpells.Add(null);
                            continue;
                        }

                        if (int.TryParse(twoda["SpellIndex"][row], out parseholder))
                        {
                            if (parseholder < ALFA.Shared.Modules.InfoStore.CoreSpells.Count &&
                                ALFA.Shared.Modules.InfoStore.CoreSpells[parseholder] != null)
                            {
                                ip.Spell = ALFA.Shared.Modules.InfoStore.CoreSpells[parseholder];
                            }
                            else
                            {
                                Archivist.debug += "\niprp_spells.2da : could not find a spell with index " + parseholder.ToString();
                                ALFA.Shared.Modules.InfoStore.IPCastSpells.Add(null);
                                continue;
                            }
                        }
                        else
                        {
                            Archivist.debug += "\niprp_spells.2da : could not parse the spell index of " + row.ToString();
                            ALFA.Shared.Modules.InfoStore.IPCastSpells.Add(null);
                            continue;
                        }

                        ALFA.Shared.Modules.InfoStore.IPCastSpells.Add(ip);
                    }
                }
                catch (Exception ex)
                {
                    Archivist.debug += "\n iprp_spells.2da error: " + ex.Message;
                }

                try
                {
                    OEIShared.IO.TwoDA.TwoDAFile twoda = manager.OpenTwoDAResource(manager.GetResource("baseitems", ALFA.ResourceManager.Res2DA).ResRef.Value, ALFA.ResourceManager.Res2DA);
                    ALFA.Shared.Modules.InfoStore.BaseItems = new List<ALFA.Shared.BaseItem>(twoda.RowCount);
                    var ColumnFields = ALFA.Shared.TwoDAReader.GetColumnFieldInfo(typeof(ALFA.Shared.BaseItem));
                    for (int row = 0; row < twoda.RowCount; row++)
                    {
                        ALFA.Shared.BaseItem item = ALFA.Shared.TwoDAReader.Read2DARow<ALFA.Shared.BaseItem>(twoda, row, ColumnFields);

                        if (item.Name == null)
                            item.Name = twoda["label"][row];

                        if (item.Name == "" ||
                            item.Name == "padding" ||
                            item.Name == "PADDING" ||
                            item.Name == "DELETED" ||
                            item.Name == "PADDING_PERSONAL_VFX")
                        {
                            // This line is padding.
                            ALFA.Shared.Modules.InfoStore.BaseItems.Add(null);
                            continue;
                        }

                        ALFA.Shared.Modules.InfoStore.BaseItems.Add(item);
                    }
                }
                catch (Exception ex)
                {
                    Archivist.debug += "\n baseitems.2da error: " + ex.Message;
                }
                #endregion

                #region Gathering Information from Module.ifo
                foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResIFO))
                {
                    try
                    {
                        GFFFile currentGFF = manager.OpenGffResource(resource.ResRef.Value, resource.ResourceType);
                        int count = currentGFF.TopLevelStruct["Mod_Area_list"].ValueList.StructList.Count;
                        for (int c = 0; c < count; c++)
                        {
                            try
                            {
                                string areaResRef = currentGFF.TopLevelStruct["Mod_Area_list"].ValueList[c]["Area_Name"].ValueCExoString.ToString();
                                debug += areaResRef;
                                GFFFile currentArea = manager.OpenGffResource(areaResRef, ALFA.ResourceManager.ResARE);
                                ALFA.Shared.Modules.InfoStore.AreaNames.Add(areaResRef, currentArea.TopLevelStruct["Name"].ValueCExoLocString.ToString().Trim().Trim(',').Trim('\"'));
                            }
                            catch { }
                        }
                        if (currentGFF != null) break;
                    }
                    catch { }
                }
                #endregion

                #region Commented-Out Resource Types
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResARE))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResBBX))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResBIC))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResBMP))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResBMU))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResCAM))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResDDS))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResDFT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResDLG))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResDWK))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResFAC))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResFXA))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResGFF))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResGIC))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResGIT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResGR2))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResGUI))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResINI))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResINVALID))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResITP))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResJPG))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResJRL))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResLTR))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResMDB))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResMDL))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResNCS))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResNDB))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResNSS))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPFB))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPFX))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPLT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPTM))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPTT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPWC))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResPWK))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResSEF))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResSET))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResSPT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResSSF))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTGA))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTRn))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTRN))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTRx))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTRX))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTXI))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResTXT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUEN))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUPE))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUSC))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTD))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTE))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTM))
                //{ }

                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTR))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTS))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResUTT))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResWAV))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResWLK))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResWOK))
                //{ }
                //foreach (ResourceEntry resource in manager.GetResourcesByType(ALFA.ResourceManager.ResXML))
                //{ }
                #endregion
            }
            catch (Exception ex)
            {
                debug += ex;
            }

            ACR_Candlekeep.ArchivesInstance.Resources = manager;
            ACR_Candlekeep.ArchivesInstance.SetResourcesLoaded();
        }