public void ChangeFaction(Faction faction) { this.ResetAuto(); if ((faction != null) && base.Scenario.IsPlayer(faction)) { this.AutoHiring = true; this.AutoRewarding = true; } if ((faction != null) && (this.BelongedFaction != null)) { this.BelongedFaction.Architectures.Remove(this); this.BelongedFaction.RemoveArchitectureKnownData(this); if (!base.Scenario.IsPlayer(this.BelongedFaction)) { this.ClearRouteways(); } else { foreach (Routeway routeway in this.Routeways) { this.BelongedFaction.RemoveRouteway(routeway); } } foreach (Person person in this.Persons) { this.BelongedFaction.RemovePerson(person); } foreach (Person person in this.MovingPersons) { this.BelongedFaction.RemovePerson(person); } foreach (Captive captive in this.Captives) { this.BelongedFaction.RemoveCaptive(captive); } foreach (Military military in this.Militaries) { this.BelongedFaction.RemoveMilitary(military); } this.BelongedFaction = null; faction.AddArchitecture(this); faction.AddArchitectureKnownData(this); faction.AddArchitecturePersons(this); foreach (Person person in this.MovingPersons) { faction.AddPerson(person); } foreach (Captive captive in this.Captives.GetList()) { if (captive.CaptiveFaction == faction) { captive.CaptivePerson.BelongedCaptive = null; this.RemoveCaptive(captive); captive.CaptiveFaction.RemoveSelfCaptive(captive); base.Scenario.Captives.Remove(captive); } else { faction.AddCaptive(captive); } } this.InformationCoolDown = 0; foreach (Military military in this.Militaries) { faction.AddMilitary(military); } foreach (Routeway routeway in this.Routeways) { faction.AddRouteway(routeway); } faction.FirstSection.AddArchitecture(this); } if (faction != null) { this.jianzhuqizi.qizidezi.Text = faction.ToString().Substring(0, 1); } }
public void ChangeFaction(Faction faction) { this.ResetAuto(); if ((faction != null) && base.Scenario.IsPlayer(faction)) { this.AutoHiring = true; this.AutoRewarding = true; } if ((faction != null) && (this.BelongedFaction != null)) { this.BelongedFaction.Architectures.Remove(this); this.BelongedFaction.RemoveArchitectureKnownData(this); if (!base.Scenario.IsPlayer(this.BelongedFaction)) { this.ClearRouteways(); } else { foreach (Routeway routeway in this.Routeways) { this.BelongedFaction.RemoveRouteway(routeway); } } foreach (Military military in this.Militaries) { this.BelongedFaction.RemoveMilitary(military); } this.PurifyFactionInfluences(); this.BelongedFaction = null; faction.AddArchitecture(this); faction.AddArchitectureKnownData(this); foreach (Captive captive in this.Captives.GetList()) { if (captive.CaptiveFaction == faction) { captive.CaptivePerson.Status = PersonStatus.Normal; captive.CaptivePerson.BelongedCaptive = null; } } foreach (Military military in this.Militaries) { faction.AddMilitary(military); } foreach (Routeway routeway in this.Routeways) { faction.AddRouteway(routeway); } faction.FirstSection.AddArchitecture(this); this.ApplyFactionInfluences(); } if (faction != null) { //this.jianzhuqizi.qizidezi.Text = faction.ToString().Substring(0, 1); } }
private void CreateNewFaction(Person leader) { if (leader.Status != PersonStatus.NoFaction) return; if (leader.LocationArchitecture.BelongedFaction != null) return; Faction newFaction = new Faction(); newFaction.Scenario = this; newFaction.ID = this.Factions.GetFreeGameObjectID(); this.Factions.AddFactionWithEvent(newFaction); foreach (Faction faction2 in this.Factions) { if (faction2 != newFaction) { this.DiplomaticRelations.AddDiplomaticRelation(this, newFaction.ID, faction2.ID, 0); } } newFaction.Leader = leader; leader.Loyalty = 100; newFaction.Reputation = leader.Reputation; newFaction.Name = leader.Name; if (leader.PersonBiography != null) { foreach (MilitaryKind kind in leader.PersonBiography.MilitaryKinds.MilitaryKinds.Values) { newFaction.BaseMilitaryKinds.AddMilitaryKind(kind); } newFaction.ColorIndex = leader.PersonBiography.FactionColor; } else { newFaction.BaseMilitaryKinds.AddBasicMilitaryKinds(this); newFaction.ColorIndex = -1; } List<int> allUnusedColors = new List<int>(); for (int i = 0; i < this.GameCommonData.AllColors.Count; ++i) { allUnusedColors.Add(i); } foreach (Faction f in this.Factions) { allUnusedColors.Remove(f.ColorIndex); } if (allUnusedColors.Count == 0) { newFaction.ColorIndex = GameObject.Random(this.GameCommonData.AllColors.Count); } else { if (!allUnusedColors.Contains(newFaction.ColorIndex)) { newFaction.ColorIndex = allUnusedColors[GameObject.Random(allUnusedColors.Count)]; } } newFaction.FactionColor = this.GameCommonData.AllColors[newFaction.ColorIndex]; Architecture newFactionCapital = leader.LocationArchitecture; Faction oldFaction = newFactionCapital.BelongedFaction; newFaction.Capital = newFactionCapital; if (leader.BelongedFaction == null) { leader.Status = PersonStatus.Normal; } else { this.ChangeDiplomaticRelation(newFaction.ID, newFactionCapital.BelongedFaction.ID, -500); } newFaction.PrepareData(); newFactionCapital.ResetFaction(newFaction); newFaction.AddArchitectureKnownData(newFactionCapital); newFaction.FirstSection.AddArchitecture(newFactionCapital); if (oldFaction != null && !GameObject.Chance((int)oldFaction.Leader.PersonalLoyalty * 10)) { oldFaction.Leader.AddHated(leader); } foreach (Person p in this.AvailablePersons) { if ((p.BelongedFaction == null || p.BelongedFaction == oldFaction) && !p.IsCaptive && p.Status != PersonStatus.Princess && p != leader) { if (p.HasCloseStrainTo(leader) || p.IsVeryCloseTo(leader) || (GameObject.Chance(100 - (Person.GetIdealOffset(leader, p)) * 20))) { if (p.BelongedFaction == null || (GameObject.Chance(100 - ((int)p.PersonalLoyalty) * 25) && GameObject.Chance(220 - p.Loyalty * 2))) { if (p.BelongedFaction != null) { p.ChangeFaction(newFaction); } p.InitialLoyalty(); p.MoveToArchitecture(newFactionCapital); } } } } ExtensionInterface.call("CreateNewFaction", new Object[]{this, oldFaction, newFaction, newFactionCapital}); this.YearTable.addNewFactionEntry(this.Date, oldFaction, newFaction, newFactionCapital); if (this.OnNewFactionAppear != null) { this.OnNewFactionAppear(newFaction); } }