private void InitializeKingdom(Hero leader, Settlement target) { Kingdom newKingdom = MBObjectManager.Instance.CreateObject <Kingdom>(); try { TextObject name = new TextObject("{=!}{CLAN_NAME}"); string origin = target.Name.ToString().Replace("Castle", "").Trim(); name.SetTextVariable("CLAN_NAME", leader.Name + " of " + origin); newKingdom.InitializeKingdom(name, name, leader.Culture, Banner.CreateRandomClanBanner(leader.StringId.GetDeterministicHashCode()), 0, 0, new Vec2(target.GatePosition.X, target.GatePosition.Y)); ChangeKingdomAction.ApplyByJoinToKingdom(leader.Clan, newKingdom, false); newKingdom.RulingClan = leader.Clan; newKingdom.AddPolicy(DefaultPolicies.NobleRetinues); MBObjectManager.Instance.RegisterObject(newKingdom); } catch (Exception e) { Log.Info("Exception in InitializeKingdom"); Log.Error(e); } }
void processClans(XmlDocument document) { var nodes = document.SelectNodes("/Factions/Faction"); foreach (XmlNode node in nodes) { string attr(string attrName) => node.Attributes[attrName]?.Value; var id = attr("id"); if (id == "player_faction") { continue; } var banner = attr("banner_key") ?? Banner.CreateRandomClanBanner(id.GetDeterministicHashCode()).Serialize(); var color = attr("color"); if (color?.Trim()?.Length > 0) { color = Color.FromUint(Convert.ToUInt32(color, 16)).ToString(); } var color2 = attr("color2"); if (color2?.Trim()?.Length > 0) { color2 = Color.FromUint(Convert.ToUInt32(color2, 16)).ToString(); } if (color != null || color2 != null) { Settings.UniformColorOverride.Add(new UniformColor(id, color, color2)); } Settings.ClanBannerOverride.Add(new ClanBanner(id, banner, true)); } }
private void InitializeClan(Hero leader, string origin) { Clan newClan = MBObjectManager.Instance.CreateObject <Clan>(); try { newClan.Culture = leader.Culture; TextObject name = new TextObject("{=!}{CLAN_NAME}"); origin = origin.Replace(" Castle", ""); name.SetTextVariable("CLAN_NAME", leader.Name + " of " + origin); newClan.AddRenown(900, false); newClan.SetLeader(leader); leader.Clan = newClan; newClan.InitializeClan(name, name, leader.Culture, Banner.CreateRandomClanBanner(leader.StringId.GetDeterministicHashCode())); } catch (Exception e) { Log.Info("Exception in InitializeClan"); Log.Error(e); } }
void processKingdoms(XmlDocument document) { var nodes = document.SelectNodes("/Kingdoms/Kingdom"); foreach (XmlNode node in nodes) { string attr(string attrName) => node.Attributes[attrName]?.Value; var id = attr("id"); var banner = attr("banner_key") ?? Banner.CreateRandomClanBanner(id.GetDeterministicHashCode()).Serialize(); var color = attr("color"); if (color?.Trim()?.Length > 0) { color = Color.FromUint(Convert.ToUInt32(color, 16)).ToString(); } var color2 = attr("color2"); if (color2?.Trim()?.Length > 0) { color2 = Color.FromUint(Convert.ToUInt32(color2, 16)).ToString(); } var primaryBannerColor = BannerManager.GetColorId(Convert.ToUInt32(attr("primary_banner_color") ?? "-1", 16)); var secondaryBannerColor = BannerManager.GetColorId(Convert.ToUInt32(attr("secondary_banner_color") ?? "-1", 16)); Settings.UniformColorOverride.Add(new UniformColor(id, color, color2)); Settings.FactionColorOverride.Add(new FactionColor(id, primaryBannerColor, secondaryBannerColor)); // get ruling clan banner var rulingClan = MBObjectManager.Instance.ReadObjectReferenceFromXml <Hero>("owner", node)?.Clan; if (rulingClan != null) { Settings.ClanBannerOverride.Add(new ClanBanner(rulingClan.StringId, banner, true)); } } }
public CustomClan(String name, String informalName, CultureObject culture) { this.name = name; this.informalName = informalName; this.culture = culture; this.banner = Banner.CreateRandomClanBanner(); this.clan = new Clan(); clan.InitializeClan(new TextObject(name, null), new TextObject(informalName, null), culture, banner); }
public CustomKingdom(String name, String informalName, CultureObject culture) { this.name = name; this.informalName = informalName; this.culture = culture; this.banner = Banner.CreateRandomClanBanner(); this.kingdomColor1 = 7468453; this.kingdomColor2 = 7461621; kingdom = new Kingdom(); kingdom.InitializeKingdom(new TextObject(name), new TextObject(informalName), culture, banner, kingdomColor1, kingdomColor2); }
public static Kingdom CreateKingdom(Hero leader, TextObject name, TextObject informalName, Banner banner = null, bool showNotification = false) { var mainColor = ColorHelper.GetRandomColor(); var altColor = ColorHelper.GetRandomColor(); var kingdom = MBObjectManager.Instance.CreateObject <Kingdom>(); kingdom.InitializeKingdom(name, informalName, leader.Culture, banner ?? Banner.CreateRandomClanBanner(leader.StringId.GetDeterministicHashCode()), mainColor.ToUnsignedInteger(), mainColor.GetOpposingColor().ToUnsignedInteger(), leader.Clan.InitialPosition); ChangeKingdomAction.ApplyByCreateKingdom(leader.Clan, kingdom, showNotification); AccessTools.Property(typeof(Kingdom), "AlternativeColor").SetValue(kingdom, altColor.ToUnsignedInteger()); AccessTools.Property(typeof(Kingdom), "AlternativeColor2").SetValue(kingdom, mainColor.GetOpposingColor().ToUnsignedInteger()); AddKingdom(kingdom); return(kingdom); }
public Kingdom CreateKingdom(Hero leader, TextObject name, TextObject informalName, Banner banner = null, bool showNotification = false) { var kingdom = MBObjectManager.Instance.CreateObject <Kingdom>(); kingdom.InitializeKingdom(name, informalName, leader.Culture, banner ?? Banner.CreateRandomClanBanner(leader.StringId.GetDeterministicHashCode()), leader.Clan.Color, leader.Clan.Color2, leader.Clan.InitialPosition); ChangeKingdomAction.ApplyByJoinToKingdom(leader.Clan, kingdom, showNotification); kingdom.RulingClan = leader.Clan; AccessTools.Property(typeof(Kingdom), "AlternativeColor").SetValue(kingdom, leader.Clan.Color); AccessTools.Property(typeof(Kingdom), "AlternativeColor2").SetValue(kingdom, leader.Clan.Color2); AccessTools.Property(typeof(Kingdom), "LabelColor").SetValue(kingdom, ColorHelper.Black.ToUnsignedInteger()); kingdom.AddPolicy(DefaultPolicies.RoyalGuard); kingdom.AddPolicy(DefaultPolicies.NobleRetinues); AddKingdom(kingdom); return(kingdom); }
private Clan CreateRebellionClan(SettlementInfo info) { Clan clan = MBObjectManager.Instance.CreateObject <Clan>(info.Settlement.Name.ToString() + "_rebels_" + MBRandom.RandomInt(100000).ToString()); Hero hero = HeroCreator.CreateSpecialHero(CreateLordCharacter(info.OriginalCulture), info.Settlement, clan, clan, 30); TextObject name = new TextObject(hero.Name.ToString()); int value = MBMath.ClampInt(1, DefaultTraits.Commander.MinValue, DefaultTraits.Commander.MaxValue); hero.SetTraitLevel(DefaultTraits.Commander, value); hero.ChangeState(Hero.CharacterStates.Active); hero.Initialize(); clan.InitializeClan(name, name, info.OriginalCulture, Banner.CreateRandomClanBanner(MBRandom.RandomInt(100000))); hero.Clan = clan; clan.SetLeader(hero); clan.IsUnderMercenaryService = false; var kingdom = FormRebelKingdom(clan, info.Settlement, info.CurrentFaction); kingdom.ReactivateKingdom(); DeclareWarAction.Apply(kingdom, info.CurrentFaction); clan.ClanJoinFaction(kingdom); kingdom.RulingClan = clan; return(clan); }
public void CreateVassal() { //Settlement settlement = GetCandidateSettlements().FirstOrDefault<Settlement>(); if (targetSettlement == null) { return; } Hero hero = Hero.OneToOneConversationHero; if (hero == null) { return; } Kingdom kingdom = Hero.MainHero.MapFaction as Kingdom; if (kingdom == null) { return; } CultureObject culture = targetSettlement.Culture; TextObject clanName = NameGenerator.Current.GenerateClanName(culture, targetSettlement); string str = Guid.NewGuid().ToString().Replace("-", ""); if (null == hero.LastSeenPlace) { hero.CacheLastSeenInformation(hero.HomeSettlement, true); hero.SyncLastSeenInformation(); } //RemoveCompanionAction.ApplyByFire(Hero.MainHero.Clan, hero); //for 1.4.3 200815 HeroOperation.DealApplyByFire(Hero.MainHero.Clan, hero); HeroOperation.SetOccupationToLord(hero); hero.ChangeState(Hero.CharacterStates.Active); Clan clan = TaleWorlds.ObjectSystem.MBObjectManager.Instance.CreateObject <Clan>("sue_clan_" + str); Banner banner = Banner.CreateRandomClanBanner(-1); clan.InitializeClan(clanName, clanName, culture, banner); clan.SetLeader(hero); //clan.Tier = 5; 修改家族等级 FieldInfo fieldInfoId = clan.GetType().GetField("_tier", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); if (null != fieldInfoId) { fieldInfoId.SetValue(clan, selectClanTier); } //增加一些影响力 clan.AddRenown(50 * selectClanTier, true); hero.Clan = clan; hero.CompanionOf = null; hero.IsNoble = true; hero.SetTraitLevel(DefaultTraits.Commander, 1); MobileParty mobileParty = clan.CreateNewMobileParty(hero); mobileParty.ItemRoster.AddToCounts(DefaultItems.Grain, 10); mobileParty.ItemRoster.AddToCounts(DefaultItems.Meat, 5); ChangeOwnerOfSettlementAction.ApplyByKingDecision(hero, targetSettlement); clan.UpdateHomeSettlement(targetSettlement); int takeMoney = TakeMoneyByTier(selectClanTier); if (targetSpouse != null) { GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, hero, takeMoney / 2, false); } else { GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, hero, takeMoney, false); } //关系处理 //新晋家族关系增加 int shipIncreate = ShipIncreateByTier(selectClanTier); ChangeRelationAction.ApplyPlayerRelation(hero, shipIncreate, true, true); if (targetSpouse != null) { ChangeRelationAction.ApplyPlayerRelation(targetSpouse, shipIncreate, true, true); } //以前家族关系减低, int shipReduce = ShipReduceByTier(selectClanTier); Kingdom kindom = Hero.MainHero.MapFaction as Kingdom; if (null != kindom && shipReduce > 0) { kindom.Clans.ToList().ForEach((obj) => { if (obj != Clan.PlayerClan) { ChangeRelationAction.ApplyPlayerRelation(obj.Leader, shipReduce * -1, true, true); } } ); } if (targetSpouse != null) { targetSpouse.Spouse = hero; InformationManager.AddQuickInformation(new TextObject($"{hero.Name} marry with {targetSpouse.Name}"), 0, null, "event:/ui/notification/quest_finished"); HeroOperation.DealApplyByFire(Hero.MainHero.Clan, targetSpouse); //RemoveCompanionAction.ApplyByFire(Hero.MainHero.Clan, targetSpouse); targetSpouse.ChangeState(Hero.CharacterStates.Active); targetSpouse.IsNoble = true; HeroOperation.SetOccupationToLord(targetSpouse); targetSpouse.CompanionOf = null; targetSpouse.Clan = clan; targetSpouse.SetTraitLevel(DefaultTraits.Commander, 1); //AddCompanionAction.Apply(clan, targetSpouse); MobileParty targetSpouseMobileParty = clan.CreateNewMobileParty(targetSpouse); targetSpouseMobileParty.ItemRoster.AddToCounts(DefaultItems.Grain, 10); targetSpouseMobileParty.ItemRoster.AddToCounts(DefaultItems.Meat, 5); GiveGoldAction.ApplyBetweenCharacters(Hero.MainHero, targetSpouse, takeMoney / 2, false); } // 他们孩子处理 if (isTogetherWithThireChildren) { DealTheirChildren(hero, clan); } //加入王国 ChangeKingdomAction.ApplyByJoinToKingdom(clan, kingdom, true); }
public Clan CreateClan(Hero leader, TextObject name, TextObject informalName, Banner banner = null) { var clanName = NameGenerator.Current.GenerateClanName(leader.Culture, leader.HomeSettlement); var clan = MBObjectManager.Instance.CreateObject <Clan>(); clan.InitializeClan(name ?? clanName, informalName ?? clanName, leader.Culture, banner ?? Banner.CreateRandomClanBanner(leader.StringId.GetDeterministicHashCode())); clan.SetLeader(leader); clan.AddRenown(1000, false); leader.Clan = clan; this.Get(clan).IsCustomClan = true; return(clan); }
private static bool Prefix(Settlement settlement) { bool hadPlayerSupport = false; List <Hero> NotablesSupportingReveolt = new List <Hero>(); if (settlement.IsVillage) { return(true); } Town town = settlement.Town; foreach (var pair in NotableBehavior.RebelliousNotables) { if (town.Settlement.Notables.Contains(pair.Key)) { if (town.MapFaction == pair.Value) { hadPlayerSupport = true; NotablesSupportingReveolt.Add(pair.Key); } } foreach (Village village in town.Villages) { if (village.Settlement.Notables.Contains(pair.Key)) { hadPlayerSupport = true; NotablesSupportingReveolt.Add(pair.Key); } } } if (hadPlayerSupport) { InformationManager.ShowInquiry(new InquiryData("Rebellion", "Your supporters have started an uprising in " + settlement.Town.Name.ToString() + ". Do you want to take direct control of the settlement or let them elect their own leader? Taking control of the settlement will lead to a war with the previous owners", true, true, "take it", "let them decide", (Action)(() => { DeclareWarAction.ApplyDeclareWarOverSettlement(settlement.MapFaction, Hero.MainHero.MapFaction); ChangeOwnerOfSettlementAction.ApplyByRebellion(Hero.MainHero, settlement); }), (Action)(() => { Random rng = new Random(); Hero newLeader = NotablesSupportingReveolt[rng.Next(0, NotablesSupportingReveolt.Count - 1)]; FieldInfo field2 = newLeader.GetType().GetField("Occupation", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if ((FieldInfo)null != field2) { field2.SetValue((object)newLeader, Occupation.Lord); } Clan clan = MBObjectManager.Instance.CreateObject <Clan>(); Banner ClanBanner = Banner.CreateRandomClanBanner(); TextObject clanName = newLeader.Culture.ClanNameList[rng.Next(0, newLeader.Culture.ClanNameList.Count)]; clan.InitializeClan(clanName, clanName, newLeader.Culture, ClanBanner); clan.SetLeader(newLeader); FieldInfo field = clan.GetType().GetField("_tier", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if ((FieldInfo)null != field) { field.SetValue((object)clan, rng.Next(2, 4)); } newLeader.Clan = clan; newLeader.IsNoble = true; MobileParty newMobileParty1 = clan.CreateNewMobileParty(newLeader); newMobileParty1.ItemRoster.AddToCounts(DefaultItems.Grain, 10); newMobileParty1.ItemRoster.AddToCounts(DefaultItems.Meat, 5); List <Equipment> Lordgear = new List <Equipment>(); foreach (Hero hero in Campaign.Current.Heroes) { if (hero.Culture == newLeader.Culture && hero.IsNoble && hero.IsFemale == newLeader.IsFemale) { Lordgear.Add(hero.BattleEquipment); } } EquipmentHelper.AssignHeroEquipmentFromEquipment(newLeader, Lordgear[rng.Next(0, Lordgear.Count - 1)]); clan.UpdateHomeSettlement(settlement); ChangeRelationAction.ApplyRelationChangeBetweenHeroes(newLeader, settlement.OwnerClan.Leader, -200); if (settlement.OwnerClan.Leader != settlement.MapFaction.Leader) { ChangeRelationAction.ApplyRelationChangeBetweenHeroes(newLeader, settlement.MapFaction.Leader, -200); } DeclareWarAction.Apply(settlement.MapFaction, newLeader.MapFaction); ChangeOwnerOfSettlementAction.ApplyByRebellion(newLeader, settlement); }))); return(false); } else { return(true); } }
private void CastleAbandonSettlementMenuOption(CampaignGameStarter campaignGameStarter) { campaignGameStarter.AddGameMenuOption("ruler_castle_menu", "ruler_castle_abandon", "Abandon Rulership of Castle", (GameMenuOption.OnConditionDelegate)(args => { args.optionLeaveType = GameMenuOption.LeaveType.Manage; if (Settlement.CurrentSettlement.OwnerClan.Kingdom != null && Settlement.CurrentSettlement.OwnerClan.Kingdom.Leader != Hero.MainHero) { args.Tooltip = new TextObject("You must be the faction leader to abandon a settlement"); args.IsEnabled = false; } args.Tooltip = new TextObject("A minor noble will take control of the settlement"); return(true); }), (GameMenuOption.OnConsequenceDelegate)(args => { InformationManager.ShowInquiry(new InquiryData("Abandon Castle", "Are you sure you want to abandon this castle?", true, true, "Yes", "No", (Action)(() => { List <CharacterObject> source = new List <CharacterObject>(); CultureObject culture = Settlement.CurrentSettlement.Culture; foreach (CharacterObject characterObject in CharacterObject.Templates.Where <CharacterObject>((Func <CharacterObject, bool>)(x => x.Occupation == Occupation.Lord)).ToList <CharacterObject>()) { if (characterObject.Culture == culture) { source.Add(characterObject); } } CharacterObject template = source[rng.Next(0, source.Count - 1)]; Hero NewHero = HeroCreator.CreateSpecialHero(template, Settlement.CurrentSettlement, null, Hero.MainHero.Clan, rng.Next(25, 30)); NewHero.ChangeState(Hero.CharacterStates.Active); HeroCreationCampaignBehavior herocreationbehavior = new HeroCreationCampaignBehavior(); herocreationbehavior.DeriveSkillsFromTraits(NewHero, template); List <CharacterObject> source2 = new List <CharacterObject>(); foreach (CharacterObject characterObject in CharacterObject.Templates.Where <CharacterObject>((Func <CharacterObject, bool>)(x => x.Occupation == Occupation.Lord)).ToList <CharacterObject>()) { if (characterObject.Culture == culture) { source2.Add(characterObject); } } CharacterObject template2 = source2[rng.Next(0, source2.Count - 1)]; template2.IsFemale = true; Hero NewHero2 = HeroCreator.CreateSpecialHero(template2, Settlement.CurrentSettlement, null, Hero.MainHero.Clan, rng.Next(25, 30)); NewHero2.ChangeState(Hero.CharacterStates.Active); herocreationbehavior.DeriveSkillsFromTraits(NewHero2, template2); template2.IsFemale = false; Clan clan = MBObjectManager.Instance.CreateObject <Clan>(); Banner ClanBanner = Banner.CreateRandomClanBanner(); TextObject clanName = culture.ClanNameList[rng.Next(0, culture.ClanNameList.Count)]; clan.InitializeClan(clanName, clanName, culture, ClanBanner); clan.SetLeader(NewHero); FieldInfo field = clan.GetType().GetField("_tier", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if ((FieldInfo)null != field) { field.SetValue((object)clan, rng.Next(2, 4)); } NewHero.Clan = clan; NewHero.IsNoble = true; MobileParty newMobileParty1 = clan.CreateNewMobileParty(NewHero); newMobileParty1.ItemRoster.AddToCounts(DefaultItems.Grain, 10); newMobileParty1.ItemRoster.AddToCounts(DefaultItems.Meat, 5); NewHero2.Clan = clan; NewHero2.IsNoble = true; MobileParty newMobileParty2 = clan.CreateNewMobileParty(NewHero2); newMobileParty2.ItemRoster.AddToCounts(DefaultItems.Grain, 10); newMobileParty2.ItemRoster.AddToCounts(DefaultItems.Meat, 5); ChangeOwnerOfSettlementAction.ApplyByKingDecision(NewHero, Settlement.CurrentSettlement); clan.UpdateHomeSettlement(Settlement.CurrentSettlement); MarriageAction.Apply(NewHero, NewHero2); ChangeRelationAction.ApplyPlayerRelation(NewHero, 40); }), (Action)(() => { GameMenu.SwitchToMenu("castle"); })), true); }), index: 1);;; }