public bool                         Inject(ModHelperDef def)
        {
            if (def.PostLoadInjectors.NullOrEmpty())
            {
                return(true);
            }

            foreach (var injectorType in def.PostLoadInjectors)
            {
                try
                {
                    var injectorObject = (SpecialInjector)Activator.CreateInstance(injectorType);
                    if (injectorObject == null)
                    {
                        CCL_Log.Message(string.Format("Unable to create instance of '{0}'", injectorType.ToString()));
                        return(false);
                    }
                    if (!injectorObject.Inject())
                    {
                        CCL_Log.Message(string.Format("Error injecting '{0}'", injectorType.ToString()));
                        return(false);
                    }
                }
                catch (Exception e)
                {
                    CCL_Log.Message(e.ToString(), string.Format("Error injecting '{0}'", injectorType.ToString()));
                    return(false);
                }
            }

            dictInjected.Add(def.defName, true);
            return(true);
        }
Esempio n. 2
0
        public bool                         Inject(ModHelperDef def)
        {
            if (def.MapComponents.NullOrEmpty())
            {
                return(true);
            }

            var existingComponents = Find.Map.components;

            foreach (var componentType in def.MapComponents)
            {
                if (!existingComponents.Exists(c => c.GetType() == componentType))
                {
                    var componentObject = (MapComponent)Activator.CreateInstance(componentType);
                    if (componentObject == null)
                    {
                        CCL_Log.Message(string.Format("Unable to create instance of '{0}'", componentType));
                        return(false);
                    }
                    existingComponents.Add(componentObject);
                }
            }

            return(true);
        }
Esempio n. 3
0
        public static void                  Log()
        {
#if DEBUG
            CCL_Log.Message("v" + Current + " (debug)");
#else
            CCL_Log.Message("v" + Current);
#endif
        }
Esempio n. 4
0
        public bool                         Inject(ModHelperDef def)
        {
            if (def.ThingComps.NullOrEmpty())
            {
                return(true);
            }

            for (var index = 0; index < def.ThingComps.Count; index++)
            {
                var injectionSet = def.ThingComps[index];
                if (
                    (!injectionSet.requiredMod.NullOrEmpty()) &&
                    (Find_Extensions.ModByName(injectionSet.requiredMod) == null)
                    )
                {
                    continue;
                }
                var thingDefs = DefInjectionQualifier.FilteredThingDefs(injectionSet.qualifier, ref injectionSet.qualifierInt, injectionSet.targetDefs);
                if (!thingDefs.NullOrEmpty())
                {
#if DEBUG
                    var stringBuilder = new StringBuilder();
                    stringBuilder.Append("ThingComps :: Qualifier returned: ");
#endif
                    foreach (var thingDef in thingDefs)
                    {
#if DEBUG
                        stringBuilder.Append(thingDef.defName + ", ");
#endif
                        // TODO:  Make a full copy using the comp in this def as a template
                        // Currently adds the comp in this def so all target use the same def
                        if (!thingDef.HasComp(injectionSet.compProps.compClass))
                        {
                            thingDef.comps.Add(injectionSet.compProps);
                        }
                    }
#if DEBUG
                    CCL_Log.Message(stringBuilder.ToString(), def.ModName);
#endif
                }
            }

            return(true);
        }
        public bool                         Inject(ModHelperDef def)
        {
            if (def.ITabs.NullOrEmpty())
            {
                return(true);
            }

            for (var index = 0; index < def.ITabs.Count; index++)
            {
                var injectionSet = def.ITabs[index];
                if (
                    (!injectionSet.requiredMod.NullOrEmpty()) &&
                    (Find_Extensions.ModByName(injectionSet.requiredMod) == null)
                    )
                {
                    continue;
                }
                var thingDefs = DefInjectionQualifier.FilteredThingDefs(injectionSet.qualifier, ref injectionSet.qualifierInt, injectionSet.targetDefs);
                if (!thingDefs.NullOrEmpty())
                {
#if DEBUG
                    var stringBuilder = new StringBuilder();
                    stringBuilder.Append("ITabs :: Qualifier returned: ");
#endif
                    foreach (var thingDef in thingDefs)
                    {
#if DEBUG
                        stringBuilder.Append(thingDef.defName + ", ");
#endif
                        if (!InjectITab(injectionSet.newITab, injectionSet.replaceITab, thingDef))
                        {
                            return(false);
                        }
                    }
#if DEBUG
                    CCL_Log.Message(stringBuilder.ToString(), def.ModName);
#endif
                }
            }

            return(true);
        }
        public bool                         Inject(ModHelperDef def)
        {
            if (def.Facilities.NullOrEmpty())
            {
                return(true);
            }

            for (var index = 0; index < def.Facilities.Count; index++)
            {
                var injectionSet = def.Facilities[index];
                if (
                    (!injectionSet.requiredMod.NullOrEmpty()) &&
                    (Find_Extensions.ModByName(injectionSet.requiredMod) == null)
                    )
                {
                    continue;
                }
                var facilityDef = DefDatabase <ThingDef> .GetNamed(injectionSet.facility);

                var thingDefs = DefInjectionQualifier.FilteredThingDefs(injectionSet.qualifier, ref injectionSet.qualifierInt, injectionSet.targetDefs);
                if (!thingDefs.NullOrEmpty())
                {
#if DEBUG
                    var stringBuilder = new StringBuilder();
                    stringBuilder.Append("Facilities :: Qualifier returned: ");
#endif
                    foreach (var thingDef in thingDefs)
                    {
#if DEBUG
                        stringBuilder.Append(thingDef.defName + ", ");
#endif
                        LinkFacility(thingDef, facilityDef);
                    }
#if DEBUG
                    CCL_Log.Message(stringBuilder.ToString(), def.ModName);
#endif
                }
            }

            return(true);
        }
Esempio n. 7
0
 public override bool Inject()
 {
     CCL_Log.Message("PostLoadInjectorTest - Injected");
     return(true);
 }
Esempio n. 8
0
        public override void ResolveReferences()
        {
            base.ResolveReferences();

            if (!this.addToDatabase)
            {
                return;
            }
            if (BackstoryDatabase.allBackstories.ContainsKey(this.UniqueSaveKey()))
            {
                return;
            }

            Backstory b = new Backstory();

            if (!this.title.NullOrEmpty())
            {
                b.title = this.title;
            }
            else
            {
                CCL_Log.Error(defName + " backstory has empty title. Skipping...", "Backstories");
                return;
            }
            if (!titleShort.NullOrEmpty())
            {
                b.titleShort = titleShort;
            }
            else
            {
                b.titleShort = b.title;
            }

            if (!baseDescription.NullOrEmpty())
            {
                b.baseDesc = baseDescription;
            }
            else
            {
                CCL_Log.Message(defName + " backstory has empty description.", "Backstories");
                b.baseDesc = "Empty.";
            }

            b.bodyTypeGlobal = bodyTypeGlobal;
            b.bodyTypeMale   = bodyTypeMale;
            b.bodyTypeFemale = bodyTypeFemale;

            b.slot = slot;

            b.shuffleable = shuffleable;
            if (spawnCategories.NullOrEmpty())
            {
                CCL_Log.Error(defName + " backstory doesn't have any spawn categories defined. Skipping...", "Backstories");
                return;
            }
            else
            {
                b.spawnCategories = spawnCategories;
            }

            if (workAllows.Count > 0)
            {
                foreach (WorkTags current in Enum.GetValues(typeof(WorkTags)))
                {
                    if (!workAllows.Contains(current))
                    {
                        b.workDisables |= current;
                    }
                }
            }
            else if (workDisables.Count > 0)
            {
                foreach (var tag in workDisables)
                {
                    b.workDisables |= tag;
                }
            }
            else
            {
                b.workDisables = WorkTags.None;
            }
            b.skillGains = skillGains.ToDictionary(i => i.defName, i => i.amount);

            if (forcedTraits.Count > 0)
            {
                b.forcedTraits = new List <TraitEntry>();
                foreach (var trait in forcedTraits)
                {
                    var newTrait = new TraitEntry(trait.def, trait.degree);
                    b.forcedTraits.Add(newTrait);
                }
            }

            if (disallowedTraits.Count > 0)
            {
                b.disallowedTraits = new List <TraitEntry>();
                foreach (var trait in disallowedTraits)
                {
                    var newTrait = new TraitEntry(trait.def, trait.degree);
                    b.disallowedTraits.Add(newTrait);
                }
            }

            b.ResolveReferences();
            b.PostLoad();
            b.uniqueSaveKey = this.UniqueSaveKey();

            bool flag = false;

            foreach (var s in b.ConfigErrors(false))
            {
                if (!flag)
                {
                    flag = true;
                    CCL_Log.Error("Errors in custom backstory with defName: " + defName + ", backstory will be skipped.", "Backstories");
                }
                CCL_Log.Error(defName + " error: " + s, "Backstories");
            }
            if (!flag)
            {
                BackstoryDatabase.AddBackstory(b);
                //CCL_Log.Message("Added " + this.UniqueSaveKey() + " backstory", "Backstories");
            }
        }
        public bool                         Inject(ModHelperDef def)
        {
            if (def.Designators.NullOrEmpty())
            {
                return(true);
            }

            foreach (var designatorData in def.Designators)
            {
                // Get the category
                var designationCategory = DefDatabase <DesignationCategoryDef> .GetNamed(designatorData.designationCategoryDef, false);

                // First instatiate and inject the designator into the list of resolved designators
                if (!designationCategory.resolvedDesignators.Exists(d => d.GetType() == designatorData.designatorClass))
                {
                    // Create the new designator
                    var designatorObject = (Designator)Activator.CreateInstance(designatorData.designatorClass);
                    if (designatorObject == null)
                    {
                        CCL_Log.Message(string.Format("Unable to create instance of '{0}'", designatorData.designatorClass));
                        return(false);
                    }

                    if (designatorData.designatorNextTo == null)
                    {
                        // Inject the designator
                        designationCategory.resolvedDesignators.Add(designatorObject);
                    }
                    else
                    {
                        // Prefers to be beside a specific designator
                        var designatorIndex = designationCategory.resolvedDesignators.FindIndex(d => (
                                                                                                    (d.GetType() == designatorData.designatorNextTo)
                                                                                                    ));

                        if (designatorIndex < 0)
                        {
                            // Other designator doesn't exist (yet?)
                            // Inject the designator at the end
                            designationCategory.resolvedDesignators.Add(designatorObject);
                        }
                        else
                        {
                            // Inject beside desired designator
                            designationCategory.resolvedDesignators.Insert(designatorIndex + 1, designatorObject);
                        }
                    }
                }

                // Now inject the designator class into the list of classes as a saftey net for another mod resolving the category
                if (!designationCategory.specialDesignatorClasses.Exists(s => s == designatorData.designatorClass))
                {
                    if (designatorData.designatorNextTo == null)
                    {
                        // Inject the designator class at the end of the list
                        designationCategory.specialDesignatorClasses.Add(designatorData.designatorClass);
                    }
                    else
                    {
                        // Prefers to be beside a specific designator
                        var designatorIndex = designationCategory.specialDesignatorClasses.FindIndex(s => s == designatorData.designatorNextTo);

                        if (designatorIndex < 0)
                        {
                            // Can't find desired designator class
                            // Inject the designator at the end
                            designationCategory.specialDesignatorClasses.Add(designatorData.designatorClass);
                        }
                        else
                        {
                            // Inject beside desired designator class
                            designationCategory.specialDesignatorClasses.Insert(designatorIndex + 1, designatorData.designatorClass);
                        }
                    }
                }
            }

            return(true);
        }
        public bool                         Inject(ModHelperDef def)
        {
            if (def.ThingDefAvailability.NullOrEmpty())
            {
                return(true);
            }

            for (int index = 0; index < def.ThingDefAvailability.Count; ++index)
            {
                var injectionSet = def.ThingDefAvailability[index];
                if (
                    (!injectionSet.requiredMod.NullOrEmpty()) &&
                    (Find_Extensions.ModByName(injectionSet.requiredMod) == null)
                    )
                {
                    continue;
                }
                var thingDefs = DefInjectionQualifier.FilteredThingDefs(injectionSet.qualifier, ref injectionSet.qualifierInt, injectionSet.targetDefs);
                if (!thingDefs.NullOrEmpty())
                {
#if DEBUG
                    var stringBuilder = new StringBuilder();
                    stringBuilder.Append("ThingDefAvailability :: Qualifier returned: ");
#endif
                    bool setMenuHidden  = !injectionSet.menuHidden.NullOrEmpty();
                    bool setDesignation = !injectionSet.designationCategory.NullOrEmpty();
                    bool setResearch    = injectionSet.researchPrerequisites != null;

                    bool menuHidden = false;
                    List <ResearchProjectDef> research = null;

                    if (setMenuHidden)
                    {
                        menuHidden = injectionSet.menuHidden.ToLower() == "true" ? true : false;
                    }
                    if (
                        (setResearch) &&
                        (injectionSet.researchPrerequisites.Count > 0)
                        )
                    {
                        research = DefDatabase <ResearchProjectDef> .AllDefs.Where(projectDef => injectionSet.researchPrerequisites.Contains(projectDef.defName)).ToList();
                    }

                    foreach (var thingDef in thingDefs)
                    {
#if DEBUG
                        stringBuilder.Append(thingDef.defName + ", ");
#endif
                        if (setMenuHidden)
                        {
                            thingDef.menuHidden = menuHidden;
                        }
                        if (setDesignation)
                        {
                            thingDef.ChangeDesignationCategory(injectionSet.designationCategory);
                        }
                        if (setResearch)
                        {
                            thingDef.researchPrerequisites = research;
                        }
                    }
#if DEBUG
                    CCL_Log.Message(stringBuilder.ToString(), def.ModName);
#endif
                }
            }

            dictInjected.Add(def.defName, true);
            return(true);
        }