public static void Prefix(DialogController __instance)
        {
            if (!Main.modEnabled)
            {
                return;
            }
            if (!Main.settings.useDialogListenerDefaultCompanionCustomPortraitFix)
            {
                return;
            }
            if (Game.Instance.DialogController.CurrentCue.Listener?.CharacterName == Game.Instance.Player.MainCharacter.Value.CharacterName)
            {
                return;
            }
            if (Game.Instance.Player.AllCharacters.Find(x => x.CharacterName == Game.Instance.DialogController.CurrentCue.Listener?.CharacterName) == null)
            {
                return;
            }



            foreach (UnitEntityData u in Game.Instance.DialogController.InvolvedUnits)
            {
                if (Game.Instance.DialogController.CurrentCue.Listener.name == u.Blueprint.name &&
                    u.Portrait.IsCustom)
                {
                    BlueprintPortrait blueprintPortrait = new BlueprintPortrait();
                    blueprintPortrait.Data = u.Portrait;
                    typeof(BlueprintUnit).GetField("m_Portrait", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(Game.Instance.DialogController.CurrentCue.Listener, blueprintPortrait);
                }
            }


            return;
        }
        public void LoadPortraits()
        {
            portraits = new Dictionary <string, BlueprintPortrait>();

            string customPortraitsDirectory = GetPortraitsDirectory();

            foreach (string guid in CompanionGUID.Keys)
            {
                string companionName = CompanionGUID[guid];

                bool notfound = false;

                foreach (string filename in PortraitFileNames)
                {
                    if (!File.Exists(Path.Combine(Path.Combine(customPortraitsDirectory, companionName, filename))))
                    {
                        notfound = true;
                        break;
                    }
                }

                if (notfound)
                {
                    continue;
                }

                portraits[guid] = new BlueprintPortrait {
                    Data = new CustomPortraitData(Path.Combine(customPortraitsDirectory, companionName))
                };
            }
        }
 public bool SelectPortrait([NotNull] BlueprintPortrait portrait)
 {
     this.RemoveAction <SelectPortrait>(null);
     if (!this.AddAction(new SelectPortrait(portrait), false))
     {
         return(false);
     }
     if (this.Doll != null)
     {
         this.Doll.SetPortrait(portrait);
     }
     return(true);
 }
        public static bool Prefix(ref PortraitForSave __result, UnitEntityData u)
        {
            if (!Main.enabled)
            {
                return(true);
            }
            if (u.UISettings?.PortraitBlueprint?.AssetGuid == null)
            {
                return(true);
            }

            BlueprintPortrait portrait = CompanionCustomPortraitsManager.Instance.GetPortrait(u.UISettings.PortraitBlueprint.AssetGuid);

            if (portrait != null)
            {
                __result = new PortraitForSave(portrait);
                return(false);
            }

            return(true);
        }
        public static bool Prefix(ref BlueprintPortrait __result, BlueprintPortrait ___m_Portrait)
        {
            if (!Main.enabled)
            {
                return(true);
            }
            if (___m_Portrait?.AssetGuid == null)
            {
                return(true);
            }

            BlueprintPortrait p = CompanionCustomPortraitsManager.Instance.GetPortrait(___m_Portrait.AssetGuid);

            if (p != null)
            {
                __result = p;
                return(false);
            }

            return(true);
        }
        private static BlueprintFeature AddSpiderCompanion()
        {
            PortraitData portraitData = new PortraitData("AdvancedMartialArtsSpider");

            BlueprintPortrait portrait = Helpers.Create <BlueprintPortrait>();

            portrait.Data = portraitData;
            Main.library.AddAsset(portrait, Helpers.getGuid("GiantSpiderPortrait"));

            BlueprintUnitFact reducedReachFact = Main.library.Get <BlueprintUnitFact>("c33f2d68d93ceee488aa4004347dffca");
            BlueprintFeature  weaponFinesse    = Main.library.Get <BlueprintFeature>("90e54424d682d104ab36436bd527af09");

            BlueprintFeature animalCompanionUpgradeCentipede = Main.library.Get <BlueprintFeature>("c938099ca0438b242b3edecfa9083e9f");
            BlueprintUnit    animalCompanionUnitCentipede    = Main.library.Get <BlueprintUnit>("f9df16ffd0c8cec4d99a0ae6f025a3f8");

            BlueprintUnit giantSpider = Main.library.CopyAndAdd <BlueprintUnit>("c4b33e5fd3d3a6f46b2aade647b0bf25", "GiantSpiderCompanion", Helpers.getGuid("GiantSpiderCompanion"));

            BlueprintItemWeapon Bite1d6         = Main.library.Get <BlueprintItemWeapon>("a000716f88c969c499a535dadcf09286");
            BlueprintItemWeapon EmptyHandWeapon = Main.library.Get <BlueprintItemWeapon>("20375b5a0c9243d45966bd72c690ab74");

            giantSpider.Brain           = animalCompanionUnitCentipede.Brain;
            giantSpider.ComponentsArray = animalCompanionUnitCentipede.ComponentsArray;
            giantSpider.Body            = animalCompanionUnitCentipede.Body;
            giantSpider.AddFacts        = giantSpider.AddFacts.AddToArray(weaponFinesse);
            giantSpider.Faction         = Main.library.Get <BlueprintFaction>("d8de50cc80eb4dc409a983991e0b77ad"); // Neutral faction

            Helpers.SetField(giantSpider, "m_Portrait", portrait);

            BlueprintUnitAsksList giantSpiderBarks = Main.library.CopyAndAdd <BlueprintUnitAsksList>("7d340f75a57c47d45b0e79200a6b5eac", "SpiderAnimalCompanionBarks", Helpers.getGuid("SpiderAnimalCompanionBarks"));
            UnitAsksComponent     component        = giantSpiderBarks.GetComponent <UnitAsksComponent>();

            foreach (var componentAnimationBark in component.AnimationBarks)
            {
                if (componentAnimationBark.AnimationEvent == MappedAnimationEventType.AlertSound1 || componentAnimationBark.AnimationEvent == MappedAnimationEventType.AlertSound2)
                {
                    componentAnimationBark.Cooldown = 10f;
                    componentAnimationBark.DelayMin = 5f;
                }
            }

            ChangeUnitSize unitSize = Helpers.Create <ChangeUnitSize>(x => x.SizeDelta = 1);

            FieldInfo typeField = unitSize.GetType().GetField("m_Type", BindingFlags.NonPublic | BindingFlags.Instance);
            object    delta     = unitSize.GetType().GetNestedType("ChangeType", BindingFlags.NonPublic).GetField("Delta").GetValue(unitSize);

            typeField.SetValue(unitSize, delta);

            AddMechanicsFeature addMechanicsFeature = Helpers.Create <AddMechanicsFeature>();

            Traverse traverse = Traverse.Create(addMechanicsFeature);

            traverse.Field("m_Feature").SetValue(AddMechanicsFeature.MechanicsFeatureType.IterativeNaturalAttacks);


            typeField.SetValue(unitSize, delta);

            BlueprintFeature animalCompanionFeatureSpider = Main.library.CopyAndAdd <BlueprintFeature>("f9ef7717531f5914a9b6ecacfad63f46", "AnimalCompanionFeatureGiantSpider", Helpers.getGuid("AnimalCompanionFeatureGiantSpider"));

            animalCompanionFeatureSpider.SetNameDescription("Animal Companion — Giant Spider", "Size Medium\nSpeed 30 ft.\nAC +1 natural armor\nAttack bite (1d6 plus poison)\nAbility Scores Str 11, Dex 17, Con 12, Int 1, Wis 10, Cha 2\nSpecial Attacks poison (frequency 1 round (4); effect 1d2 Str damage; cure 1 save; Con-based DC)\nCMD +8 vs. trip.\nAt 7th level size becomes Large, Str +2, Dex +8, Con +4, +2 natural armor.");

            AddPet addPetFact = animalCompanionFeatureSpider.ComponentsArray.OfType <AddPet>().First();

            animalCompanionFeatureSpider.RemoveComponent(addPetFact);
            addPetFact = UnityEngine.Object.Instantiate(addPetFact);
            animalCompanionFeatureSpider.AddComponent(addPetFact);

            addPetFact.Pet            = giantSpider;
            addPetFact.UpgradeFeature = Helpers.CreateFeature(
                "AnimalCompanionUpgradeGiantSpider",
                "",
                "",
                Helpers.getGuid("AnimalCompanionUpgradeGiantSpider"),
                animalCompanionUpgradeCentipede.Icon,
                FeatureGroup.None,
                unitSize,
                Helpers.Create <AddStatBonus>(x =>
            {
                x.Stat       = StatType.AC;
                x.Value      = 2;
                x.Descriptor = ModifierDescriptor.NaturalArmor;
            }),
                Helpers.Create <AddStatBonus>(x =>
            {
                x.Stat  = StatType.Strength;
                x.Value = 2;
            }),
                Helpers.Create <AddStatBonus>(x =>
            {
                x.Stat  = StatType.Dexterity;
                x.Value = 8;
            }),
                Helpers.Create <AddStatBonus>(x =>
            {
                x.Stat  = StatType.Constitution;
                x.Value = 4;
            }),
                addMechanicsFeature,
                Helpers.CreateAddFacts(reducedReachFact)
                );
            addPetFact.UpgradeLevel = 7;
            return(animalCompanionFeatureSpider);
        }
Example #7
0
        static public void LoadOnLibraryLoaded()
        {
            if (loaded)
            {
                return;
            }
            flagIsRisiaSpawned     = Helpers.Create <BlueprintUnlockableFlag>();
            flagIsRisiaBossSpawned = Helpers.Create <BlueprintUnlockableFlag>();
            library.AddAsset(flagIsRisiaSpawned, "942339abe7b76dfb00324d433a0a9342");
            library.AddAsset(flagIsRisiaBossSpawned, "942339abe7b76dfb00324d433a0a9343");
            flagIsRisiaSpawned.Lock();
            flagIsRisiaSpawned.name = "flagIsRisiaSpawned";
            flagIsRisiaBossSpawned.Lock();
            flagIsRisiaBossSpawned.name = "flagIsRisiaBossSpawned";

            FastGetter    portrait_Getter    = Helpers.CreateFieldGetter <BlueprintUnit>("m_Portrait");
            PortraitData  risia_portraitData = CreatePortraitData("Risia");
            BlueprintUnit risia_companion    = library.Get <BlueprintUnit>("c2dc52c5fec84bc2a74e2cb34fdb566b");
            BlueprintUnit risia_neutral      = library.Get <BlueprintUnit>("d87f8e86724f46e798821d60f9d31eaf");
            BlueprintUnit risia_boss         = library.Get <BlueprintUnit>("95fb27a5b8ae40099bd727ea93de5b9b");

            foreach (var unit in new BlueprintUnit[] { risia_companion, risia_neutral, risia_boss })
            {
                BlueprintPortrait portraitBlue = portrait_Getter(unit) as BlueprintPortrait;
                portraitBlue.Data = risia_portraitData;
            }
            RisiaAddSpecialSpells.LoadSpecialSpells();
            RisiaAddLevels.Load();
            RisiaAddSpecialSpells.CreateFeats();
            RisiaAddBrain.Load();

            List <BlueprintFeature> risiaNeutralAddFacts = new List <BlueprintFeature>();

            risiaNeutralAddFacts.AddRange(RisiaAddLevels.RisiaAddFacts);
            risiaNeutralAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellListFeat);
            risiaNeutralAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellFeat);
            List <BlueprintFeature> risiaBossAddFacts = new List <BlueprintFeature>();

            risiaBossAddFacts.AddRange(RisiaAddLevels.RisiaBossAddFacts);
            risiaBossAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellListFeat);
            risiaBossAddFacts.Add(RisiaAddSpecialSpells.addSpecialSpellFeat);

            var risiaFeatureList = Helpers.CreateFeature("RisiaFeatureList", "", "",
                                                         OtherUtils.GetMd5("Risia.FeatureList"),
                                                         IconSet.elvenmagic,
                                                         FeatureGroup.None,
                                                         //RisiaAddLevels.compNeutral,
                                                         Helpers.Create <AddFacts>(a => a.Facts = risiaNeutralAddFacts.ToArray()));
            var risiaBossFeatureList = Helpers.CreateFeature("RisiaBossFeatureList", "", "",
                                                             OtherUtils.GetMd5("Risia.Boss.FeatureList"),
                                                             IconSet.elvenmagic,
                                                             FeatureGroup.None,
                                                             //RisiaAddLevels.compBoss,
                                                             Helpers.Create <AddFacts>(a => a.Facts = risiaBossAddFacts.ToArray()));

            risia_neutral.AddComponent(RisiaAddLevels.compNeutral);
            risia_companion.AddComponent(RisiaAddLevels.compNeutral);
            risia_boss.AddComponent(RisiaAddLevels.compBoss);
            var tmpList = risia_neutral.AddFacts.ToList();

            tmpList.Add(risiaFeatureList);
            risia_neutral.AddFacts = tmpList.ToArray();
            var tmpList2 = risia_companion.AddFacts.ToList();

            tmpList2.Add(risiaFeatureList);
            risia_companion.AddFacts = tmpList2.ToArray();
            var tmpList3 = risia_boss.AddFacts.ToList();

            tmpList3.Add(risiaBossFeatureList);
            risia_boss.AddFacts = tmpList3.ToArray();

            RisiaAddDispelAura.AddToRisia(ref risia_boss);
            loaded = true;
        }
Example #8
0
 static public void create()
 {
     phantom_portrait = Helpers.createPortrait("PhantomProtrait", "Phantom", "");
     createPhantomClass();
     createPhantoms();
 }