private static void CSAddCompanion(int NoToAdd) { Hero mainhero = Hero.MainHero; for (int i = 0; i < NoToAdd; i++) { string Locculture = CSCharCreationOption.CSOptionSettlement().Culture.StringId; CharacterObject wanderer = (from x in CharacterObject.Templates where x.Occupation == Occupation.Wanderer && (x.Culture.StringId == mainhero.Culture.StringId || x.Culture.StringId == Locculture) select x).GetRandomElementInefficiently <CharacterObject>(); Settlement randomElement = (from settlement in Settlement.All where settlement.Culture == wanderer.Culture && settlement.IsTown select settlement).GetRandomElementInefficiently <Settlement>(); Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, null, null, 33); Campaign.Current.GetCampaignBehavior <IHeroCreationCampaignBehavior>().DeriveSkillsFromTraits(hero, wanderer); GiveGoldAction.ApplyBetweenCharacters(null, hero, 2000, true); CSSetEquip(hero, 4); hero.HasMet = true; hero.Clan = randomElement.OwnerClan; hero.ChangeState(Hero.CharacterStates.Active); AddCompanionAction.Apply(Clan.PlayerClan, hero); AddHeroToPartyAction.Apply(hero, MobileParty.MainParty, true); CampaignEventDispatcher.Instance.OnHeroCreated(hero, false); } }
private static void AddExiledHero() { Hero mainhero = Hero.MainHero; CharacterObject wanderer = (from x in CharacterObject.Templates where x.Occupation == Occupation.Wanderer && x.Culture.StringId == mainhero.Culture.StringId select x).GetRandomElementInefficiently <CharacterObject>(); Equipment equipment = (from y in CharacterObject.All where y.Level > 20 && y.Culture.StringId == wanderer.Culture.StringId && !y.IsHero && y.Tier > 4 select y).GetRandomElementInefficiently <CharacterObject>().Equipment; Equipment equipmentMC = (from z in CharacterObject.All where z.Tier == 4 && z.Culture.StringId == wanderer.Culture.StringId && !z.IsHero select z).GetRandomElementInefficiently <CharacterObject>().Equipment; Settlement randomElement = (from settlement in Settlement.All where settlement.Culture == wanderer.Culture && settlement.IsTown select settlement).GetRandomElementInefficiently <Settlement>(); //wanderer.Equipment.FillFrom(equipment); Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, null, null, 33); Campaign.Current.GetCampaignBehavior <IHeroCreationCampaignBehavior>().DeriveSkillsFromTraits(hero, wanderer); GiveGoldAction.ApplyBetweenCharacters(null, hero, 4000, true); hero.BattleEquipment.FillFrom(equipment); mainhero.BattleEquipment.FillFrom(equipmentMC); hero.HasMet = true; hero.Clan = randomElement.OwnerClan; hero.ChangeState(Hero.CharacterStates.Active); AddCompanionAction.Apply(Clan.PlayerClan, hero); AddHeroToPartyAction.Apply(hero, MobileParty.MainParty, true); CampaignEventDispatcher.Instance.OnHeroCreated(hero, false); }
internal void CECaptorMakeHeroCompanion(Hero captive) { if (captive == null) { return; } if (captive.IsFactionLeader) { if (captive.Clan != null && captive.Clan.IsKingdomFaction) { Kingdom kingdom = captive.Clan.Kingdom; Clan result = null; float num = 0f; IEnumerable <Clan> clans = kingdom.Clans; foreach (Clan clan in clans.Where((Clan t) => t.Heroes.Any((Hero h) => h.IsAlive) && !t.IsMinorFaction && t != captive.Clan)) { float clanStrength = Campaign.Current.Models.DiplomacyModel.GetClanStrength(clan); if (num <= clanStrength) { num = clanStrength; result = clan; } } kingdom.RulingClan = result; } } AddCompanionAction.Apply(Clan.PlayerClan, captive); }
public void ConversationResuelt() { if (!MobileParty.MainParty.MemberRoster.Contains(_sneaker.CharacterObject)) { MobileParty.MainParty.MemberRoster.AddToCounts(_sneaker.CharacterObject, 1); } AddCompanionAction.Apply(Clan.PlayerClan, _sneaker); }
public static void NPCToCompanion(CharacterObject character, CampaignGameStarter campaignGameStarter) { Hero hero = DealNPC(character, campaignGameStarter); OccuptionChange.ChangeToWanderer(hero.CharacterObject); // hero.IsNoble = true; if (!MobileParty.MainParty.MemberRoster.Contains(hero.CharacterObject)) { MobileParty.MainParty.MemberRoster.AddToCounts(hero.CharacterObject, 1); } AddCompanionAction.Apply(Clan.PlayerClan, hero); }
private void conversation_courtship_success_on_consequence() { ISettingsProvider settings = new MASettings(); Hero hero = Hero.MainHero; Hero spouse = Hero.OneToOneConversationHero; Hero oldSpouse = hero.Spouse; Hero cheatedSpouse = spouse.Spouse; // If you are marrying a kingdom ruler as a kingdom ruler yourself, // the kingdom ruler will have to give up being clan head. // Apparently causes issues if this is not done. if (spouse.IsFactionLeader && !spouse.IsMinorFactionHero) { if (hero.Clan.Kingdom != spouse.Clan.Kingdom) { if (hero.Clan.Kingdom?.Leader != hero) { // Join kingdom due to lowborn status if (hero.Clan.Leader == Hero.MainHero) { ChangeClanLeaderAction.ApplyWithoutSelectedNewLeader(hero.Clan); if (hero.Clan.Leader == Hero.MainHero) { MAHelper.Print("No Heirs"); DestroyClanAction.Apply(hero.Clan); MAHelper.Print("Eliminated Player Clan"); } } foreach (Hero companion in hero.Clan.Companions.ToList()) { bool inParty = false; if (companion.PartyBelongedTo == MobileParty.MainParty) { inParty = true; } RemoveCompanionAction.ApplyByFire(hero.Clan, companion); AddCompanionAction.Apply(spouse.Clan, companion); if (inParty) { AddHeroToPartyAction.Apply(companion, MobileParty.MainParty, true); } } hero.Clan = spouse.Clan; var current = Traverse.Create <Campaign>().Property("Current").GetValue <Campaign>(); Traverse.Create(current).Property("PlayerDefaultFaction").SetValue(spouse.Clan); MAHelper.Print("Lowborn Player Married to Kingdom Ruler"); } else { ChangeClanLeaderAction.ApplyWithoutSelectedNewLeader(spouse.Clan); MAHelper.Print("Kingdom Ruler Stepped Down and Married to Player"); } } } // New nobility MAHelper.OccupationToLord(spouse.CharacterObject); if (!spouse.IsNoble) { spouse.IsNoble = true; MAHelper.Print("Spouse to Noble"); } // Dodge the party crash for characters part 1 bool dodge = false; if (spouse.PartyBelongedTo == MobileParty.MainParty) { AccessTools.Property(typeof(Hero), "PartyBelongedTo").SetValue(spouse, null, null); MAHelper.Print("Spouse Already in Player's Party"); dodge = true; } // Apply marriage ChangeRomanticStateAction.Apply(hero, spouse, Romance.RomanceLevelEnum.Marriage); MAHelper.Print("Marriage Action Applied"); if (oldSpouse is not null) { MAHelper.RemoveExSpouses(oldSpouse); } // Dodge the party crash for characters part 2 if (dodge) { AccessTools.Property(typeof(Hero), "PartyBelongedTo").SetValue(spouse, MobileParty.MainParty, null); } // Activate character if not already activated if (!spouse.HasMet) { spouse.HasMet = true; } if (!spouse.IsActive) { spouse.ChangeState(Hero.CharacterStates.Active); MAHelper.Print("Activated Spouse"); } if (spouse.IsPlayerCompanion) { spouse.CompanionOf = null; MAHelper.Print("Spouse No Longer Companion"); } if (settings.Cheating && cheatedSpouse is not null) { MAHelper.RemoveExSpouses(cheatedSpouse, true); MAHelper.RemoveExSpouses(spouse, true); MAHelper.Print("Spouse Broke Off Past Marriage"); } MAHelper.RemoveExSpouses(hero); MAHelper.RemoveExSpouses(spouse); PlayerEncounter.LeaveEncounter = true; // New fix to stop some kingdom rulers from disappearing if (spouse.PartyBelongedTo != MobileParty.MainParty) { AddHeroToPartyAction.Apply(spouse, MobileParty.MainParty, true); } }
public void SpawnTheHero(SpawnHero[] variables, PartyBase party) { foreach (SpawnHero heroVariables in variables) { try { bool isFemale = heroVariables.Gender != null && heroVariables.Gender.ToLower() == "female"; string culture = null; if (heroVariables.Culture != null) { switch (heroVariables.Culture.ToLower()) { case "player": culture = Hero.MainHero.Culture.StringId; break; case "captor": culture = party.Culture.StringId; break; default: culture = heroVariables.Culture; break; } } else { culture = heroVariables.Culture; } CharacterObject wanderer = (from x in CharacterObject.Templates where x.Occupation == Occupation.Wanderer && (culture == null || x.Culture != null && x.Culture.StringId == culture.ToLower()) && (heroVariables.Gender == null || x.IsFemale == isFemale) select x).GetRandomElementInefficiently(); Settlement randomElement = (from settlement in Settlement.All where settlement.Culture == wanderer.Culture && settlement.IsTown select settlement).GetRandomElementInefficiently(); Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, Clan.BanditFactions.GetRandomElementInefficiently(), null, -1); GiveGoldAction.ApplyBetweenCharacters(null, hero, 20000, true); hero.HasMet = true; hero.ChangeState(Hero.CharacterStates.Active); if (heroVariables.Clan != null) { switch (heroVariables.Clan.ToLower()) { case "captor": AddCompanionAction.Apply(party.Owner.Clan, hero); break; case "player": AddCompanionAction.Apply(Clan.PlayerClan, hero); break; default: break; } } try { int level = 0; int xp = 0; if (heroVariables.SkillsToLevel != null) { foreach (SkillToLevel skillToLevel in heroVariables.SkillsToLevel) { if (!string.IsNullOrWhiteSpace(skillToLevel.ByLevel)) { level = new CEVariablesLoader().GetIntFromXML(skillToLevel.ByLevel); } else if (!string.IsNullOrWhiteSpace(skillToLevel.ByXP)) { xp = new CEVariablesLoader().GetIntFromXML(skillToLevel.ByXP); } new Dynamics().SkillModifier(hero, skillToLevel.Id, level, xp, !skillToLevel.HideNotification, skillToLevel.Color); } } } catch (Exception e) { CECustomHandler.ForceLogToFile("Failed to level spawning Hero" + e); } if (heroVariables.Ref == "Prisoner" || heroVariables.Ref == "prisoner") { TakePrisonerAction.Apply(party, hero); } else { if (!party.IsMobile) { AddHeroToPartyAction.Apply(hero, party.Settlement.Party.MobileParty, true); } else { AddHeroToPartyAction.Apply(hero, party.MobileParty, true); } } CampaignEventDispatcher.Instance.OnHeroCreated(hero, false); } catch (Exception e) { CECustomHandler.ForceLogToFile("Failed to SpawnTheHero : " + e); } } }