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); }
// Token: 0x06000038 RID: 56 RVA: 0x0000227B File Offset: 0x0000047B private static bool Prefix(EntityCreationController __instance, BlueprintUnit unit, Vector3 position, Quaternion rotation, SceneEntitiesState state, ref UnitEntityData __result) { if (unit == null) { Main.DebugLog("Trying to spawn null unit"); return(true); } if (unit.CustomizationPreset != null) { // Main.DebugLog("a"); UnitCustomizationVariation unitCustomizationVariation; #if DEBUG /*if (!first) * { * unitCustomizationVariation = unit.CustomizationPreset.SelectVariation(unit, null); * * * } * else * { * unitCustomizationVariation = Main.preset; * }*/ #endif unitCustomizationVariation = unit.CustomizationPreset.SelectVariation(unit, null); if (unitCustomizationVariation == null) { // Main.DebugLog($"Failed to select customization variation for unit {unit.name} (preset = {unit.CustomizationPreset.name})"); if (Main.allVariations == null || Main.allVariations.Count() == 0) { Main.Init(); } if (Main.allVariations.ContainsKey(unit.Prefab)) { //ucv.Prefab == blueprintUnit.Prefab Main.preset = Main.allVariations[unit.Prefab]; // Main.DebugLog(Main.preset.Prefab.AssetId); } else { Main.notRandom = true; } UnitEntityView prefab2 = unit.Prefab.Load(false); // Main.DebugLog("g"); __result = __instance.SpawnUnit(unit, prefab2, position, rotation, state); return(false); } /* * if (unitCustomizationVariation == null) * { * * List<UnitCustomizationPreset> presets = ResourcesLibrary.GetBlueprints<UnitCustomizationPreset>().ToList(); * * foreach (UnitCustomizationPreset preset in presets.Where(x => x.name != unit.CustomizationPreset.name)) * { * * unitCustomizationVariation = preset.SelectVariation(unit, null); * * if (unitCustomizationVariation != null) * { * break; * } * * } * * * * } */ Main.preset = unitCustomizationVariation; BlueprintUnitAsksList voice = unit.CustomizationPreset.SelectVoice(unitCustomizationVariation.Gender); // Main.DebugLog("c"); bool leftHanded = unit.CustomizationPreset.SelectLeftHanded(); // Main.DebugLog("d"); using (unitCustomizationVariation.CreateSpawningData(voice, leftHanded)) { // Main.DebugLog("e"); UnitEntityView prefab = unitCustomizationVariation.Prefab.Load(false); // Main.DebugLog("Spawn1: "+prefab.name); // Main.DebugLog("f"); __result = __instance.SpawnUnit(unit, prefab, position, rotation, state); return(false); } } else { Main.notRandom = true; // Main.DebugLog("NO CUSTOMPRESET!!!"); } UnitEntityView prefab3 = unit.Prefab.Load(false); // Main.DebugLog("g"); __result = __instance.SpawnUnit(unit, prefab3, position, rotation, state); return(false); }
public bool SelectVoice(BlueprintUnitAsksList voice) { this.RemoveAction <SelectVoice>(null); return(this.AddAction(new SelectVoice(voice), false)); }