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); }
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; }
static public void create() { phantom_portrait = Helpers.createPortrait("PhantomProtrait", "Phantom", ""); createPhantomClass(); createPhantoms(); }