public static Mole PlantMole(Empire Owner, Empire Target) { List<Planet> Potentials = new List<Planet>(); foreach (Planet p in Target.GetPlanets()) { if (!p.ExploredDict[Owner]) { continue; } bool GoodPlanet = true; foreach (Mole m in Target.data.MoleList) { if (m.PlanetGuid != p.guid) { continue; } GoodPlanet = false; break; } if (!GoodPlanet) { break; } Potentials.Add(p); } if (Potentials.Count == 0) { Potentials = Target.GetPlanets(); } Mole mole = null; if (Potentials.Count > 0) { int Random = (int)RandomMath.RandomBetween(0f, (float)Potentials.Count + 0.7f); if (Random > Potentials.Count - 1) { Random = Potentials.Count - 1; } mole = new Mole() { PlanetGuid = Potentials[Random].guid }; Owner.data.MoleList.Add(mole); } return mole; }
public string AnalyzeOffer(Offer ToUs, Offer FromUs, Empire them, Offer.Attitude attitude) { if (ToUs.Alliance) { if (!ToUs.IsBlank() || !FromUs.IsBlank()) { return "OFFER_ALLIANCE_TOO_COMPLICATED"; } if (this.empire.GetRelations()[them].Trust < 90f || this.empire.GetRelations()[them].TotalAnger >= 20f || this.empire.GetRelations()[them].TurnsKnown <= 100) { return "AI_ALLIANCE_REJECT"; } this.SetAlliance(true, them); return "AI_ALLIANCE_ACCEPT"; } if (ToUs.PeaceTreaty) { GSAI.PeaceAnswer answer = this.AnalyzePeaceOffer(ToUs, FromUs, them, attitude); if (!answer.peace) { return answer.answer; } this.AcceptOffer(ToUs, FromUs, this.empire, them); this.empire.GetRelations()[them].Treaty_Peace = true; this.empire.GetRelations()[them].PeaceTurnsRemaining = 100; them.GetRelations()[this.empire].Treaty_Peace = true; them.GetRelations()[this.empire].PeaceTurnsRemaining = 100; return answer.answer; } Empire us = this.empire; float TotalTrustRequiredFromUS = 0f; DTrait dt = us.data.DiplomaticPersonality; if (FromUs.TradeTreaty) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS + (float)dt.Trade; } if (FromUs.OpenBorders) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS + ((float)dt.NAPact + 7.5f); } if (FromUs.NAPact) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS + (float)dt.NAPact; int numWars = 0; foreach (KeyValuePair<Empire, Ship_Game.Gameplay.Relationship> Relationship in us.GetRelations()) { if (Relationship.Key.isFaction || !Relationship.Value.AtWar) { continue; } numWars++; } if (numWars > 0 && !us.GetRelations()[them].AtWar) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS - (float)dt.NAPact; } else if (us.GetRelations()[them].Threat >= 20f) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS - (float)dt.NAPact; } } foreach (string tech in FromUs.TechnologiesOffered) { TotalTrustRequiredFromUS = TotalTrustRequiredFromUS + ResourceManager.TechTree[tech].Cost / 50f; } float ValueFromUs = 0f; float ValueToUs = 0f; if (FromUs.OpenBorders) { ValueFromUs = ValueFromUs + 5f; } if (ToUs.OpenBorders) { ValueToUs = ValueToUs + 0.01f; } if (FromUs.NAPact) { ValueFromUs = ValueFromUs + 5f; } if (ToUs.NAPact) { ValueToUs = ValueToUs + 5f; } if (FromUs.TradeTreaty) { ValueFromUs = ValueFromUs + 5f; } if (ToUs.TradeTreaty) { ValueToUs = ValueToUs + 5f; if ((double)this.empire.EstimateIncomeAtTaxRate(0.5f) < 1) { ValueToUs = ValueToUs + 20f; } } foreach (string tech in FromUs.TechnologiesOffered) { ValueFromUs = ValueFromUs + (us.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 50f * 0.25f + ResourceManager.TechTree[tech].Cost / 50f : ResourceManager.TechTree[tech].Cost / 50f); } foreach (string artifactsOffered in FromUs.ArtifactsOffered) { ValueFromUs = ValueFromUs + 15f; } foreach (string str in ToUs.ArtifactsOffered) { ValueToUs = ValueToUs + 15f; } foreach (string tech in ToUs.TechnologiesOffered) { ValueToUs = ValueToUs + (us.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 50f * 0.25f + ResourceManager.TechTree[tech].Cost / 50f : ResourceManager.TechTree[tech].Cost / 50f); } if (us.GetPlanets().Count - FromUs.ColoniesOffered.Count + ToUs.ColoniesOffered.Count < 1) { us.GetRelations()[them].DamageRelationship(us, them, "Insulted", 25f, null); return "OfferResponse_Reject_Insulting"; } foreach (string planetName in FromUs.ColoniesOffered) { foreach (Planet p in us.GetPlanets()) { if (p.Name != planetName) { continue; } float value = p.Population / 1000f + p.FoodHere / 25f + p.ProductionHere / 25f + p.Fertility + p.MineralRichness + p.MaxPopulation / 1000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 25f; if (b.Name != "Capital City") { continue; } value = value + 100f; } float multiplier = 0f; foreach (Planet other in p.system.PlanetList) { if (other.Owner != p.Owner) { continue; } multiplier = multiplier + 1.25f; } value = value * multiplier; if (value < 15f) { value = 15f; } ValueFromUs = ValueFromUs + (us.data.EconomicPersonality.Name == "Expansionists" ? value + value : value + 0.5f * value); } } foreach (string planetName in ToUs.ColoniesOffered) { foreach (Planet p in them.GetPlanets()) { if (p.Name != planetName) { continue; } float value = p.Population / 1000f + p.FoodHere / 50f + p.ProductionHere / 50f + p.Fertility + p.MineralRichness + p.MaxPopulation / 2000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 50f; } int multiplier = 1; foreach (Planet other in p.system.PlanetList) { if (other.Owner != p.Owner) { continue; } multiplier++; } value = value * (float)multiplier; ValueToUs = ValueToUs + (us.data.EconomicPersonality.Name == "Expansionists" ? value * 0.5f + value : value); } } ValueToUs = ValueToUs + them.data.Traits.DiplomacyMod * ValueToUs; if (ValueFromUs == 0f && ValueToUs > 0f) { us.GetRelations()[them].ImproveRelations(ValueToUs, ValueToUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Gift"; } ValueToUs = ValueToUs - ValueToUs * us.GetRelations()[them].TotalAnger / 100f; float offerdifferential = ValueToUs / (ValueFromUs + 0.01f); string OfferQuality = ""; if (offerdifferential < 0.6f) { OfferQuality = "Insulting"; } else if (offerdifferential < 0.9f && offerdifferential >= 0.6f) { OfferQuality = "Poor"; } else if (offerdifferential >= 0.9f && offerdifferential < 1.1f) { OfferQuality = "Fair"; } else if ((double)offerdifferential >= 1.1 && (double)offerdifferential < 1.45) { OfferQuality = "Good"; } else if (offerdifferential >= 1.45f) { OfferQuality = "Great"; } if (ValueToUs == ValueFromUs) { OfferQuality = "Fair"; } switch (attitude) { case Offer.Attitude.Pleading: { if (TotalTrustRequiredFromUS > us.GetRelations()[them].Trust) { if (OfferQuality != "Great") { return "OfferResponse_InsufficientTrust"; } us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_AcceptGreatOffer_LowTrust"; } if (offerdifferential < 0.6f) { OfferQuality = "Insulting"; } else if (offerdifferential < 0.8f && offerdifferential > 0.65f) { OfferQuality = "Poor"; } else if (offerdifferential >= 0.8f && offerdifferential < 1.1f) { OfferQuality = "Fair"; } else if ((double)offerdifferential >= 1.1 && (double)offerdifferential < 1.45) { OfferQuality = "Good"; } else if (offerdifferential >= 1.45f) { OfferQuality = "Great"; } if (OfferQuality == "Poor") { return "OfferResponse_Reject_PoorOffer_EnoughTrust"; } if (OfferQuality == "Insulting") { us.GetRelations()[them].DamageRelationship(us, them, "Insulted", ValueFromUs - ValueToUs, null); return "OfferResponse_Reject_Insulting"; } if (OfferQuality == "Fair") { us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Fair_Pleading"; } if (OfferQuality == "Good") { us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Good"; } if (OfferQuality != "Great") { break; } us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Great"; } case Offer.Attitude.Respectful: { if (TotalTrustRequiredFromUS + us.GetRelations()[them].TrustUsed <= us.GetRelations()[them].Trust) { if (OfferQuality == "Poor") { return "OfferResponse_Reject_PoorOffer_EnoughTrust"; } if (OfferQuality == "Insulting") { us.GetRelations()[them].DamageRelationship(us, them, "Insulted", ValueFromUs - ValueToUs, null); return "OfferResponse_Reject_Insulting"; } if (OfferQuality == "Fair") { us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Fair"; } if (OfferQuality == "Good") { us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Good"; } if (OfferQuality != "Great") { break; } us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs - ValueFromUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_Accept_Great"; } else { if (OfferQuality == "Great") { us.GetRelations()[them].ImproveRelations(ValueToUs - ValueFromUs, ValueToUs); this.AcceptOffer(ToUs, FromUs, us, them); return "OfferResponse_AcceptGreatOffer_LowTrust"; } if (OfferQuality == "Poor") { return "OfferResponse_Reject_PoorOffer_LowTrust"; } if (OfferQuality == "Fair" || OfferQuality == "Good") { return "OfferResponse_InsufficientTrust"; } if (OfferQuality != "Insulting") { break; } us.GetRelations()[them].DamageRelationship(us, them, "Insulted", ValueFromUs - ValueToUs, null); return "OfferResponse_Reject_Insulting"; } } case Offer.Attitude.Threaten: { if (dt.Name == "Ruthless") { return "OfferResponse_InsufficientFear"; } us.GetRelations()[them].DamageRelationship(us, them, "Insulted", ValueFromUs - ValueToUs, null); if (OfferQuality == "Great") { this.AcceptThreat(ToUs, FromUs, us, them); return "OfferResponse_AcceptGreatOffer_LowTrust"; } if (offerdifferential < 0.95f) { OfferQuality = "Poor"; } else if (offerdifferential >= 0.95f) { OfferQuality = "Fair"; } if (us.GetRelations()[them].Threat <= ValueFromUs || us.GetRelations()[them].FearUsed + ValueFromUs >= us.GetRelations()[them].Threat) { return "OfferResponse_InsufficientFear"; } if (OfferQuality == "Poor") { this.AcceptThreat(ToUs, FromUs, us, them); return "OfferResponse_Accept_Bad_Threatening"; } if (OfferQuality != "Fair") { break; } this.AcceptThreat(ToUs, FromUs, us, them); return "OfferResponse_Accept_Fair_Threatening"; } } return ""; }
private float GetDistance(Empire e) { if (e.GetPlanets().Count == 0 || this.empire.GetPlanets().Count == 0) { return 0f; } Vector2 AvgPos = new Vector2(); foreach (Planet p in e.GetPlanets()) { AvgPos = AvgPos + p.Position; } AvgPos = AvgPos / (float)e.GetPlanets().Count; Vector2 Ouravg = new Vector2(); foreach (Planet p in this.empire.GetPlanets()) { Ouravg = Ouravg + p.Position; } Ouravg = Ouravg / (float)this.empire.GetPlanets().Count; return Vector2.Distance(AvgPos, Ouravg); }
private Vector2 FindAveragePosition(Empire e) { Vector2 AvgPos = new Vector2(); foreach (Planet p in e.GetPlanets()) { AvgPos = AvgPos + p.Position; } if (e.GetPlanets().Count <= 0) { return Vector2.Zero; } Vector2 count = AvgPos / (float)e.GetPlanets().Count; AvgPos = count; return count; }
public void AcceptThreat(Offer ToUs, Offer FromUs, Empire us, Empire Them) { if (ToUs.PeaceTreaty) { this.empire.GetRelations()[Them].AtWar = false; this.empire.GetRelations()[Them].PreparingForWar = false; this.empire.GetRelations()[Them].ActiveWar.EndStarDate = this.empire.GetUS().StarDate; this.empire.GetRelations()[Them].WarHistory.Add(this.empire.GetRelations()[Them].ActiveWar); this.empire.GetRelations()[Them].Posture = Posture.Neutral; if (this.empire.GetRelations()[Them].Anger_FromShipsInOurBorders > (float)(this.empire.data.DiplomaticPersonality.Territorialism / 3)) { this.empire.GetRelations()[Them].Anger_FromShipsInOurBorders = (float)(this.empire.data.DiplomaticPersonality.Territorialism / 3); } if (this.empire.GetRelations()[Them].Anger_TerritorialConflict > (float)(this.empire.data.DiplomaticPersonality.Territorialism / 3)) { this.empire.GetRelations()[Them].Anger_TerritorialConflict = (float)(this.empire.data.DiplomaticPersonality.Territorialism / 3); } this.empire.GetRelations()[Them].Anger_MilitaryConflict = 0f; this.empire.GetRelations()[Them].WarnedAboutShips = false; this.empire.GetRelations()[Them].WarnedAboutColonizing = false; this.empire.GetRelations()[Them].HaveRejected_Demand_Tech = false; this.empire.GetRelations()[Them].HaveRejected_OpenBorders = false; this.empire.GetRelations()[Them].HaveRejected_TRADE = false; this.empire.GetRelations()[Them].HasDefenseFleet = false; if (this.empire.GetRelations()[Them].DefenseFleet != -1) { this.empire.GetFleetsDict()[this.empire.GetRelations()[Them].DefenseFleet].Task.EndTask(); } lock (GlobalStats.TaskLocker) { foreach (MilitaryTask task in this.TaskList) { if (task.GetTargetPlanet() == null || task.GetTargetPlanet().Owner == null || task.GetTargetPlanet().Owner != Them) { continue; } task.EndTask(); } } this.empire.GetRelations()[Them].ActiveWar = null; Them.GetRelations()[this.empire].AtWar = false; Them.GetRelations()[this.empire].PreparingForWar = false; Them.GetRelations()[this.empire].ActiveWar.EndStarDate = Them.GetUS().StarDate; Them.GetRelations()[this.empire].WarHistory.Add(Them.GetRelations()[this.empire].ActiveWar); Them.GetRelations()[this.empire].Posture = Posture.Neutral; if (EmpireManager.GetEmpireByName(Them.GetUS().PlayerLoyalty) != Them) { if (Them.GetRelations()[this.empire].Anger_FromShipsInOurBorders > (float)(Them.data.DiplomaticPersonality.Territorialism / 3)) { Them.GetRelations()[this.empire].Anger_FromShipsInOurBorders = (float)(Them.data.DiplomaticPersonality.Territorialism / 3); } if (Them.GetRelations()[this.empire].Anger_TerritorialConflict > (float)(Them.data.DiplomaticPersonality.Territorialism / 3)) { Them.GetRelations()[this.empire].Anger_TerritorialConflict = (float)(Them.data.DiplomaticPersonality.Territorialism / 3); } Them.GetRelations()[this.empire].Anger_MilitaryConflict = 0f; Them.GetRelations()[this.empire].WarnedAboutShips = false; Them.GetRelations()[this.empire].WarnedAboutColonizing = false; Them.GetRelations()[this.empire].HaveRejected_Demand_Tech = false; Them.GetRelations()[this.empire].HaveRejected_OpenBorders = false; Them.GetRelations()[this.empire].HaveRejected_TRADE = false; if (Them.GetRelations()[this.empire].DefenseFleet != -1) { Them.GetFleetsDict()[Them.GetRelations()[this.empire].DefenseFleet].Task.EndTask(); } lock (GlobalStats.TaskLocker) { foreach (MilitaryTask task in Them.GetGSAI().TaskList) { if (task.GetTargetPlanet() == null || task.GetTargetPlanet().Owner == null || task.GetTargetPlanet().Owner != this.empire) { continue; } task.EndTask(); } } } Them.GetRelations()[this.empire].ActiveWar = null; } if (ToUs.NAPact) { us.GetRelations()[Them].Treaty_NAPact = true; FearEntry te = new FearEntry(); if (EmpireManager.GetEmpireByName(this.empire.GetUS().PlayerLoyalty) != us) { string name = us.data.DiplomaticPersonality.Name; string str = name; if (name != null) { if (str == "Pacifist") { te.FearCost = 0f; } else if (str == "Cunning") { te.FearCost = 0f; } else if (str == "Xenophobic") { te.FearCost = 15f; } else if (str == "Aggressive") { te.FearCost = 35f; } else if (str == "Honorable") { te.FearCost = 5f; } else if (str == "Ruthless") { te.FearCost = 50f; } } } us.GetRelations()[Them].FearEntries.Add(te); } if (FromUs.NAPact) { Them.GetRelations()[us].Treaty_NAPact = true; if (EmpireManager.GetEmpireByName(this.empire.GetUS().PlayerLoyalty) != Them) { FearEntry te = new FearEntry(); string name1 = Them.data.DiplomaticPersonality.Name; string str1 = name1; if (name1 != null) { if (str1 == "Pacifist") { te.FearCost = 0f; } else if (str1 == "Cunning") { te.FearCost = 0f; } else if (str1 == "Xenophobic") { te.FearCost = 15f; } else if (str1 == "Aggressive") { te.FearCost = 35f; } else if (str1 == "Honorable") { te.FearCost = 5f; } else if (str1 == "Ruthless") { te.FearCost = 50f; } } Them.GetRelations()[us].FearEntries.Add(te); } } if (ToUs.TradeTreaty) { us.GetRelations()[Them].Treaty_Trade = true; us.GetRelations()[Them].Treaty_Trade_TurnsExisted = 0; FearEntry te = new FearEntry() { FearCost = 5f }; us.GetRelations()[Them].FearEntries.Add(te); } if (FromUs.TradeTreaty) { Them.GetRelations()[us].Treaty_Trade = true; Them.GetRelations()[us].Treaty_Trade_TurnsExisted = 0; FearEntry te = new FearEntry() { FearCost = 0.1f }; Them.GetRelations()[us].FearEntries.Add(te); } if (ToUs.OpenBorders) { us.GetRelations()[Them].Treaty_OpenBorders = true; FearEntry te = new FearEntry() { FearCost = 5f }; us.GetRelations()[Them].FearEntries.Add(te); } if (FromUs.OpenBorders) { Them.GetRelations()[us].Treaty_OpenBorders = true; FearEntry te = new FearEntry() { FearCost = 5f }; Them.GetRelations()[us].FearEntries.Add(te); } foreach (string tech in FromUs.TechnologiesOffered) { Them.UnlockTech(tech); if (EmpireManager.GetEmpireByName(this.empire.GetUS().PlayerLoyalty) == us) { continue; } FearEntry te = new FearEntry() { FearCost = (us.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 100f * 0.25f + ResourceManager.TechTree[tech].Cost / 100f : ResourceManager.TechTree[tech].Cost / 100f), TurnTimer = 40 }; us.GetRelations()[Them].FearEntries.Add(te); } foreach (string tech in ToUs.TechnologiesOffered) { us.UnlockTech(tech); if (EmpireManager.GetEmpireByName(this.empire.GetUS().PlayerLoyalty) == Them) { continue; } FearEntry te = new FearEntry() { FearCost = (Them.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 100f * 0.25f + ResourceManager.TechTree[tech].Cost / 100f : ResourceManager.TechTree[tech].Cost / 100f) }; Them.GetRelations()[us].FearEntries.Add(te); } foreach (string Art in FromUs.ArtifactsOffered) { Artifact toGive = ResourceManager.ArtifactsDict[Art]; foreach (Artifact arti in us.data.OwnedArtifacts) { if (arti.Name != Art) { continue; } toGive = arti; } us.RemoveArtifact(toGive); Them.AddArtifact(toGive); } foreach (string Art in ToUs.ArtifactsOffered) { Artifact toGive = ResourceManager.ArtifactsDict[Art]; foreach (Artifact arti in Them.data.OwnedArtifacts) { if (arti.Name != Art) { continue; } toGive = arti; } Them.RemoveArtifact(toGive); us.AddArtifact(toGive); } foreach (string planetName in FromUs.ColoniesOffered) { List<Planet> toRemove = new List<Planet>(); List<Ship> TroopShips = new List<Ship>(); foreach (Planet p in us.GetPlanets()) { if (p.Name != planetName) { continue; } foreach (PlanetGridSquare pgs in p.TilesList) { if (pgs.TroopsHere.Count <= 0 || pgs.TroopsHere[0].GetOwner() != this.empire) { continue; } TroopShips.Add(pgs.TroopsHere[0].Launch()); } toRemove.Add(p); p.Owner = Them; Them.AddPlanet(p); p.system.OwnerList.Clear(); foreach (Planet pl in p.system.PlanetList) { if (pl.Owner == null || p.system.OwnerList.Contains(pl.Owner)) { continue; } p.system.OwnerList.Add(pl.Owner); } float value = p.Population / 1000f + p.FoodHere / 50f + p.ProductionHere / 50f + p.Fertility + p.MineralRichness + p.MaxPopulation / 10000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 50f; } FearEntry te = new FearEntry(); if (value < 15f) { value = 15f; } te.FearCost = (us.data.EconomicPersonality.Name == "Expansionists" ? value + value : value + 0.5f * value); te.TurnTimer = 40; us.GetRelations()[Them].FearEntries.Add(te); } foreach (Planet p in toRemove) { us.GetPlanets().Remove(p); } foreach (Ship ship in TroopShips) { ship.GetAI().OrderRebaseToNearest(); } } foreach (string planetName in ToUs.ColoniesOffered) { List<Planet> toRemove = new List<Planet>(); List<Ship> TroopShips = new List<Ship>(); foreach (Planet p in Them.GetPlanets()) { if (p.Name != planetName) { continue; } toRemove.Add(p); p.Owner = us; us.AddPlanet(p); p.system.OwnerList.Clear(); foreach (Planet pl in p.system.PlanetList) { if (pl.Owner == null || p.system.OwnerList.Contains(pl.Owner)) { continue; } p.system.OwnerList.Add(pl.Owner); } float value = p.Population / 1000f + p.FoodHere / 50f + p.ProductionHere / 50f + p.Fertility + p.MineralRichness + p.MaxPopulation / 10000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 50f; } foreach (PlanetGridSquare pgs in p.TilesList) { if (pgs.TroopsHere.Count <= 0 || pgs.TroopsHere[0].GetOwner() != Them) { continue; } TroopShips.Add(pgs.TroopsHere[0].Launch()); } if (EmpireManager.GetEmpireByName(this.empire.GetUS().PlayerLoyalty) == Them) { continue; } FearEntry te = new FearEntry() { FearCost = (Them.data.EconomicPersonality.Name == "Expansionists" ? value + value : value + 0.5f * value), TurnTimer = 40 }; Them.GetRelations()[us].FearEntries.Add(te); } foreach (Planet p in toRemove) { Them.GetPlanets().Remove(p); } foreach (Ship ship in TroopShips) { ship.GetAI().OrderRebaseToNearest(); } } us.GetRelations()[Them].UpdateRelationship(us, Them); }
public GSAI.PeaceAnswer AnalyzePeaceOffer(Offer ToUs, Offer FromUs, Empire them, Offer.Attitude attitude) { WarState state; Empire us = this.empire; DTrait dt = us.data.DiplomaticPersonality; float ValueToUs = 0f; float ValueFromUs = 0f; foreach (string tech in FromUs.TechnologiesOffered) { ValueFromUs = ValueFromUs + (us.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 100f * 0.25f + ResourceManager.TechTree[tech].Cost / 100f : ResourceManager.TechTree[tech].Cost / 100f); } foreach (string artifactsOffered in FromUs.ArtifactsOffered) { ValueFromUs = ValueFromUs + 15f; } foreach (string str in ToUs.ArtifactsOffered) { ValueToUs = ValueToUs + 15f; } foreach (string tech in ToUs.TechnologiesOffered) { ValueToUs = ValueToUs + (us.data.EconomicPersonality.Name == "Technologists" ? ResourceManager.TechTree[tech].Cost / 100f * 0.25f + ResourceManager.TechTree[tech].Cost / 100f : ResourceManager.TechTree[tech].Cost / 100f); } foreach (string planetName in FromUs.ColoniesOffered) { foreach (Planet p in us.GetPlanets()) { if (p.Name != planetName) { continue; } float value = p.Population / 1000f + p.FoodHere / 50f + p.ProductionHere / 50f + p.Fertility + p.MineralRichness + p.MaxPopulation / 10000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 50f; } ValueFromUs = ValueFromUs + (us.data.EconomicPersonality.Name == "Expansionists" ? value + value : value + 0.5f * value); } } List<Planet> PlanetsToUs = new List<Planet>(); foreach (string planetName in ToUs.ColoniesOffered) { foreach (Planet p in them.GetPlanets()) { if (p.Name != planetName) { continue; } PlanetsToUs.Add(p); float value = p.Population / 1000f + p.FoodHere / 50f + p.ProductionHere / 50f + p.Fertility + p.MineralRichness + p.MaxPopulation / 10000f; foreach (Building b in p.BuildingList) { value = value + b.Cost / 50f; if (b.NameTranslationIndex != 409) { continue; } value = value + 1000000f; } ValueToUs = ValueToUs + (us.data.EconomicPersonality.Name == "Expansionists" ? value * 0.5f + value : value); } } string name = dt.Name; string str1 = name; if (name != null) { if (str1 == "Pacifist") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } } } else if (str1 == "Honorable") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 15f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 8f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 8f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 15f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 15f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 8f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 8f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 15f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } } } else if (str1 == "Cunning") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } } } else if (str1 == "Xenophobic") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 15f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 8f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 8f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 15f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 15f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 8f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 8f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 15f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 5f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 10f; break; } } break; } } } else if (str1 == "Aggressive") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 75f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 200f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 75f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 200f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 10f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 5f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 75f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 200f; break; } } break; } } } else if (str1 == "Ruthless") { switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { switch (us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs)) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 5f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 1f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 120f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 300f; break; } } break; } case WarType.ImperialistWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 5f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 1f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 120f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 300f; break; } } break; } case WarType.DefensiveWar: { switch (us.GetRelations()[them].ActiveWar.GetWarScoreState()) { case WarState.LosingBadly: { ValueToUs = ValueToUs + 5f; break; } case WarState.LosingSlightly: { ValueToUs = ValueToUs + 1f; break; } case WarState.WinningSlightly: { ValueFromUs = ValueFromUs + 120f; break; } case WarState.Dominating: { ValueFromUs = ValueFromUs + 300f; break; } } break; } } } } ValueToUs = ValueToUs + them.data.Traits.DiplomacyMod * ValueToUs; float offerdifferential = ValueToUs / (ValueFromUs + 0.0001f); string OfferQuality = ""; if (offerdifferential < 0.6f) { OfferQuality = "Insulting"; } else if (offerdifferential < 0.9f && offerdifferential > 0.65f) { OfferQuality = "Poor"; } else if (offerdifferential >= 0.9f && offerdifferential < 1.1f) { OfferQuality = "Fair"; } else if ((double)offerdifferential >= 1.1 && (double)offerdifferential < 1.45) { OfferQuality = "Good"; } else if (offerdifferential >= 1.45f) { OfferQuality = "Great"; } if (ValueToUs == ValueFromUs && ValueToUs > 0f) { OfferQuality = "Fair"; } GSAI.PeaceAnswer response = new GSAI.PeaceAnswer() { peace = false, answer = "REJECT_OFFER_PEACE_POOROFFER" }; switch (us.GetRelations()[them].ActiveWar.WarType) { case WarType.BorderConflict: { state = us.GetRelations()[them].ActiveWar.GetBorderConflictState(PlanetsToUs); if (state == WarState.WinningSlightly) { if (OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else if ((OfferQuality == "Fair" || OfferQuality == "Good") && us.GetRelations()[them].ActiveWar.StartingNumContestedSystems > 0) { response.answer = "REJECT_OFFER_PEACE_UNWILLING_BC"; return response; } else if (OfferQuality == "Fair" || OfferQuality == "Good") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.Dominating) { if (OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.ColdWar) { if (OfferQuality != "Great") { response.answer = "REJECT_OFFER_PEACE_UNWILLING_BC"; return response; } else { response.answer = "ACCEPT_PEACE_COLDWAR"; response.peace = true; return response; } } else if (state != WarState.EvenlyMatched) { if (state != WarState.LosingSlightly) { if (state != WarState.LosingBadly) { return response; } if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else if (OfferQuality != "Poor") { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } else { response.answer = "ACCEPT_OFFER_PEACE_RELUCTANT"; response.peace = true; return response; } } else if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else if ((OfferQuality == "Fair" || OfferQuality == "Good") && us.GetRelations()[them].ActiveWar.StartingNumContestedSystems > 0) { response.answer = "REJECT_OFFER_PEACE_UNWILLING_BC"; return response; } else if (OfferQuality == "Fair" || OfferQuality == "Good") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } case WarType.ImperialistWar: { state = us.GetRelations()[them].ActiveWar.GetWarScoreState(); if (state == WarState.WinningSlightly) { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.Dominating) { if (OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.EvenlyMatched) { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.ColdWar) { string name1 = this.empire.data.DiplomaticPersonality.Name; str1 = name1; if (name1 != null && str1 == "Pacifist") { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (OfferQuality != "Great") { response.answer = "REJECT_PEACE_RUTHLESS"; return response; } else { response.answer = "ACCEPT_PEACE_COLDWAR"; response.peace = true; return response; } } else if (state != WarState.LosingSlightly) { if (state != WarState.LosingBadly) { return response; } if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else if (OfferQuality != "Poor") { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } else { response.answer = "ACCEPT_OFFER_PEACE_RELUCTANT"; response.peace = true; return response; } } else if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } case WarType.GenocidalWar: { return response; } case WarType.DefensiveWar: { state = us.GetRelations()[them].ActiveWar.GetWarScoreState(); if (state == WarState.WinningSlightly) { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.Dominating) { if (OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.EvenlyMatched) { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (state == WarState.ColdWar) { string name2 = this.empire.data.DiplomaticPersonality.Name; str1 = name2; if (name2 != null && str1 == "Pacifist") { if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } else if (OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_PEACE_COLDWAR"; response.peace = true; return response; } else { response.answer = "REJECT_PEACE_RUTHLESS"; return response; } } else if (state != WarState.LosingSlightly) { if (state != WarState.LosingBadly) { return response; } if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else if (OfferQuality != "Poor") { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } else { response.answer = "ACCEPT_OFFER_PEACE_RELUCTANT"; response.peace = true; return response; } } else if (OfferQuality == "Fair" || OfferQuality == "Good" || OfferQuality == "Great") { response.answer = "ACCEPT_OFFER_PEACE"; response.peace = true; return response; } else { response.answer = "REJECT_OFFER_PEACE_POOROFFER"; return response; } } default: { return response; } } }
private void UpdateIntelligence(Empire us, Empire them) { if (us.Money > this.IntelligenceBudget && this.IntelligencePenetration < 100f) { Empire money = us; money.Money = money.Money - this.IntelligenceBudget; int molecount = 0; foreach (Mole mole in us.data.MoleList) { foreach (Planet p in them.GetPlanets()) { if (p.guid != mole.PlanetGuid) { continue; } molecount++; } } Relationship intelligencePenetration = this; intelligencePenetration.IntelligencePenetration = intelligencePenetration.IntelligencePenetration + (this.IntelligenceBudget + this.IntelligenceBudget * (0.1f * (float)molecount + us.data.SpyModifier)) / 30f; if (this.IntelligencePenetration > 100f) { this.IntelligencePenetration = 100f; } } }
public void DamageRelationship(Empire Us, Empire Them, string why, float Amount, Planet p) { if (Us.data.DiplomaticPersonality == null) { return; } #if PERF if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty)==Them) return; #endif if (GlobalStats.perf && EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them) return; string str = why; string str1 = str; if (str != null) { if (str1 == "Caught Spying") { Relationship angerDiplomaticConflict = this; angerDiplomaticConflict.Anger_DiplomaticConflict = angerDiplomaticConflict.Anger_DiplomaticConflict + Amount; Relationship totalAnger = this; totalAnger.TotalAnger = totalAnger.TotalAnger + Amount; Relationship trust = this; trust.Trust = trust.Trust - Amount; Relationship spiesDetected = this; spiesDetected.SpiesDetected = spiesDetected.SpiesDetected + 1; if (Us.data.DiplomaticPersonality.Name == "Honorable" || Us.data.DiplomaticPersonality.Name == "Xenophobic") { Relationship relationship = this; relationship.Anger_DiplomaticConflict = relationship.Anger_DiplomaticConflict + Amount; Relationship totalAnger1 = this; totalAnger1.TotalAnger = totalAnger1.TotalAnger + Amount; Relationship trust1 = this; trust1.Trust = trust1.Trust - Amount; } if (this.Treaty_Alliance) { Relationship timesSpiedOnAlly = this; timesSpiedOnAlly.TimesSpiedOnAlly = timesSpiedOnAlly.TimesSpiedOnAlly + 1; if (this.TimesSpiedOnAlly == 1) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_Ally_1", true)); return; } } else if (this.TimesSpiedOnAlly > 1) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_Ally_2", true)); } this.Treaty_Alliance = false; this.Treaty_NAPact = false; this.Treaty_OpenBorders = false; this.Treaty_Trade = false; this.Posture = Ship_Game.Gameplay.Posture.Hostile; return; } } else if (this.SpiesDetected == 1 && !this.AtWar && EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { if (this.SpiesDetected == 1) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_1", true)); return; } } else if (this.SpiesDetected == 2) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_2", true)); return; } } else if (this.SpiesDetected >= 3) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_3", true)); } this.Treaty_Alliance = false; this.Treaty_NAPact = false; this.Treaty_OpenBorders = false; this.Treaty_Trade = false; this.Posture = Ship_Game.Gameplay.Posture.Hostile; return; } } } else if (str1 == "Caught Spying Failed") { Relationship angerDiplomaticConflict1 = this; angerDiplomaticConflict1.Anger_DiplomaticConflict = angerDiplomaticConflict1.Anger_DiplomaticConflict + Amount; Relationship relationship1 = this; relationship1.TotalAnger = relationship1.TotalAnger + Amount; Relationship trust2 = this; trust2.Trust = trust2.Trust - Amount; if (Us.data.DiplomaticPersonality.Name == "Honorable" || Us.data.DiplomaticPersonality.Name == "Xenophobic") { Relationship angerDiplomaticConflict2 = this; angerDiplomaticConflict2.Anger_DiplomaticConflict = angerDiplomaticConflict2.Anger_DiplomaticConflict + Amount; Relationship totalAnger2 = this; totalAnger2.TotalAnger = totalAnger2.TotalAnger + Amount; Relationship relationship2 = this; relationship2.Trust = relationship2.Trust - Amount; } Relationship spiesKilled = this; spiesKilled.SpiesKilled = spiesKilled.SpiesKilled + 1; if (this.Treaty_Alliance) { Relationship timesSpiedOnAlly1 = this; timesSpiedOnAlly1.TimesSpiedOnAlly = timesSpiedOnAlly1.TimesSpiedOnAlly + 1; if (this.TimesSpiedOnAlly == 1) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_Ally_1", true)); return; } } else if (this.TimesSpiedOnAlly > 1) { if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Caught_Spying_Ally_2", true)); } this.Treaty_Alliance = false; this.Treaty_NAPact = false; this.Treaty_OpenBorders = false; this.Treaty_Trade = false; this.Posture = Ship_Game.Gameplay.Posture.Hostile; return; } } else if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Killed_Spy_1", true)); return; } } else if (str1 == "Insulted") { Relationship angerDiplomaticConflict3 = this; angerDiplomaticConflict3.Anger_DiplomaticConflict = angerDiplomaticConflict3.Anger_DiplomaticConflict + Amount; Relationship totalAnger3 = this; totalAnger3.TotalAnger = totalAnger3.TotalAnger + Amount; Relationship trust3 = this; trust3.Trust = trust3.Trust - Amount; if (Us.data.DiplomaticPersonality.Name == "Honorable" || Us.data.DiplomaticPersonality.Name == "Xenophobic") { Relationship relationship3 = this; relationship3.Anger_DiplomaticConflict = relationship3.Anger_DiplomaticConflict + Amount; Relationship totalAnger4 = this; totalAnger4.TotalAnger = totalAnger4.TotalAnger + Amount; Relationship trust4 = this; trust4.Trust = trust4.Trust - Amount; return; } } else if (str1 == "Colonized Owned System") { List<Planet> OurTargetPlanets = new List<Planet>(); List<Planet> TheirTargetPlanets = new List<Planet>(); foreach (Goal g in Us.GetGSAI().Goals) { if (g.type != GoalType.Colonize) { continue; } OurTargetPlanets.Add(g.GetMarkedPlanet()); } foreach (Planet theirp in Them.GetPlanets()) { TheirTargetPlanets.Add(theirp); } bool MatchFound = false; SolarSystem sharedSystem = null; foreach (Planet planet in OurTargetPlanets) { foreach (Planet other in TheirTargetPlanets) { if (p == null || other == null || p.system != other.system) { continue; } sharedSystem = p.system; MatchFound = true; break; } if (!MatchFound || !Us.GetRelations()[Them].WarnedSystemsList.Contains(sharedSystem.guid)) { continue; } return; } Relationship angerTerritorialConflict = this; angerTerritorialConflict.Anger_TerritorialConflict = angerTerritorialConflict.Anger_TerritorialConflict + Amount; Relationship relationship4 = this; relationship4.Trust = relationship4.Trust - Amount; if (this.Anger_TerritorialConflict < (float)Us.data.DiplomaticPersonality.Territorialism && !this.AtWar) { if (this.AtWar) { return; } if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { if (!this.WarnedAboutShips) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Colonized Warning", p)); } else if (!this.AtWar) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Warning Ships then Colonized", p)); } this.turnsSinceLastContact = 0; this.WarnedAboutColonizing = true; this.contestedSystem = p.system; this.contestedSystemGuid = p.system.guid; return; } } } else { if (str1 != "Destroyed Ship") { return; } if (this.Anger_MilitaryConflict == 0f && !this.AtWar) { Relationship angerMilitaryConflict = this; angerMilitaryConflict.Anger_MilitaryConflict = angerMilitaryConflict.Anger_MilitaryConflict + Amount; Relationship trust5 = this; trust5.Trust = trust5.Trust - Amount; if (EmpireManager.GetEmpireByName(Us.GetUS().PlayerLoyalty) == Them && !Us.isFaction) { if (this.Anger_MilitaryConflict < 2f) { Us.GetUS().ScreenManager.AddScreen(new DiplomacyScreen(Us, Them, "Aggression Warning")); } Relationship relationship5 = this; relationship5.Trust = relationship5.Trust - Amount; } } Relationship angerMilitaryConflict1 = this; angerMilitaryConflict1.Anger_MilitaryConflict = angerMilitaryConflict1.Anger_MilitaryConflict + Amount; } } }
//added by gremlin Domission from devek mod. public void DoMission(Empire Owner) { spyMute = AgentComponent.SpyMute; Planet target; Empire Target = EmpireManager.GetEmpireByName(this.TargetEmpire); AgentMission startingmission = this.Mission; #region EmpireDefeated if (Target != null && Target.data.Defeated) { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; return; } #endregion #region New DiceRoll float DiceRoll = RandomMath.RandomBetween(this.Level * ResourceManager.AgentMissionData.MinRollPerLevel, ResourceManager.AgentMissionData.MaxRoll); float DefensiveRoll = 0f; DiceRoll += (float)this.Level * RandomMath.RandomBetween(1f, ResourceManager.AgentMissionData.RandomLevelBonus); DiceRoll += Owner.data.SpyModifier; DiceRoll += Owner.data.OffensiveSpyBonus; if (Target != null) { for (int i = 0; i < Target.data.AgentList.Count; i++) { if (Target.data.AgentList[i].Mission == AgentMission.Defending) { DefensiveRoll += (float)Target.data.AgentList[i].Level * ResourceManager.AgentMissionData.DefenceLevelBonus; } } DefensiveRoll /= Owner.GetPlanets().Count / 3 + 1; DefensiveRoll += Target.data.SpyModifier; DefensiveRoll += Target.data.DefensiveSpyBonus; DiceRoll -= DefensiveRoll; } #endregion switch (this.Mission) { #region Training case AgentMission.Training: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (DiceRoll >= ResourceManager.AgentMissionData.TrainingRollPerfect) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.TrainingExpPerfect, Owner); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6025)), Owner); this.Training++; break; } else if (DiceRoll > ResourceManager.AgentMissionData.TrainingRollGood) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.TrainingExpGood, Owner); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6026)), Owner); this.Training++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.TrainingRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.TrainingRollWorst) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6027)), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.Training; break; } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6028)), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6029)), Owner); break; } } #endregion #region Infiltrate easy case AgentMission.Infiltrate: { if (Target == null || Target.GetPlanets().Count == 0) { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; return; } if (DiceRoll >= ResourceManager.AgentMissionData.InfiltrateRollGood) { this.Mission = AgentMission.Undercover; this.MissionNameIndex = 2201; //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.InfiltrateExpGood, Owner); Mole m = Mole.PlantMole(Owner, Target); this.TargetGUID = m.PlanetGuid; if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6030), " ", Ship.universeScreen.PlanetsDict[m.PlanetGuid].Name, Localizer.Token(6031)), Owner); this.Infiltrations++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.InfiltrateRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.InfiltrateRollWorst) { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6032)), Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6033), " ", Owner.data.Traits.Name), Target); } this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.Infiltrate; this.PreviousTarget = this.TargetEmpire; break; } this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6034)), Owner); Owner.data.AgentList.QueuePendingRemoval(this); if (Target != EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { break; } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6035), " ", Owner.data.Traits.Name), Target); break; } else { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.InfiltrateExp, Owner); this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6036)), Owner); if (Target != EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { break; } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6033), " ", Owner.data.Traits.Name), Target); break; } } #endregion #region Assassinate hard case AgentMission.Assassinate: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (Target == null || Target.data.AgentList.Count == 0) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6038)), Owner); return; } if (DiceRoll >= ResourceManager.AgentMissionData.AssassinateRollPerfect) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.AssassinateExpPerfect, Owner); Agent m = Target.data.AgentList[HelperFunctions.GetRandomIndex(Target.data.AgentList.Count)]; Target.data.AgentList.Remove(m); if (m.Mission == AgentMission.Undercover) { foreach (Mole mole in Owner.data.MoleList) { if (mole.PlanetGuid != m.TargetGUID) { continue; } Owner.data.MoleList.QueuePendingRemoval(mole); break; } } Owner.data.MoleList.ApplyPendingRemovals(); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { //if (!GremlinAgentComponent.AutoTrain) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat("One of our Agents was mysteriously assassinated: ", m.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6039), " ", m.Name, Localizer.Token(6040)), Owner); this.Assassinations++; break; } else if (DiceRoll >= ResourceManager.AgentMissionData.AssassinateRollGood) { Agent m = Target.data.AgentList[HelperFunctions.GetRandomIndex(Target.data.AgentList.Count)]; Target.data.AgentList.Remove(m); if (m.Mission == AgentMission.Undercover) { foreach (Mole mole in Owner.data.MoleList) { if (mole.PlanetGuid != m.TargetGUID) { continue; } Owner.data.MoleList.QueuePendingRemoval(mole); break; } } //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.AssassinateExpGood, Owner); Owner.data.MoleList.ApplyPendingRemovals(); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6037), " ", m.Name, Localizer.Token(6041), " ", Owner.data.Traits.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6039), " ", m.Name, Localizer.Token(6042)), Owner); this.Assassinations++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.AssassinateRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.AssassinateRollWorst) { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6043), " ", Owner.data.Traits.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6044)), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.Assassinate; this.PreviousTarget = this.TargetEmpire; break; } this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6045), " ", Owner.data.Traits.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6046)), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.AssassinateExp, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6043), " ", Owner.data.Traits.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6047)), Owner); break; } } #endregion #region Sabotage easy case AgentMission.Sabotage: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (Target==null || Target.GetPlanets().Count == 0) { return; } target = EmpireManager.GetEmpireByName(this.TargetEmpire).GetPlanets()[HelperFunctions.GetRandomIndex(EmpireManager.GetEmpireByName(this.TargetEmpire).GetPlanets().Count)]; this.TargetGUID = target.guid; if (DiceRoll >= ResourceManager.AgentMissionData.SabotageRollPerfect) { Planet crippledTurns = target; crippledTurns.Crippled_Turns = crippledTurns.Crippled_Turns + 5 + this.Level * 5; if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6048), " ", target.Name), Target); } NotificationManager notificationManager = Ship.universeScreen.NotificationManager; string[] name = new string[] { this.Name, " " + Localizer.Token(6084) + " ", null, null, null, null }; int num = 5 + this.Level * 5; name[2] = num.ToString(); name[3] = " " + Localizer.Token(6085) + " "; name[4] = target.Name; name[5] = Localizer.Token(6031); if (!spyMute) notificationManager.AddAgentResultNotification(true, string.Concat(name), Owner); //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.SabotageExpPerfect, Owner); this.Sabotages++; break; } else if (DiceRoll > ResourceManager.AgentMissionData.SabotageRollGood) { Planet planet = target; planet.Crippled_Turns = planet.Crippled_Turns + 5 + this.Level * 3; if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6048), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } NotificationManager notificationManager1 = Ship.universeScreen.NotificationManager; string[] str = new string[] { this.Name, " " + Localizer.Token(6084) + " ", null, null, null, null }; int num1 = 5 + this.Level * 3; str[2] = num1.ToString(); str[3] = " " + Localizer.Token(6085) + " "; str[4] = target.Name; str[5] = Localizer.Token(6031); if (!spyMute) notificationManager1.AddAgentResultNotification(true, string.Concat(str), Owner); //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.SabotageExpGood, Owner); this.Sabotages++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.SabotageRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.SabotageRollWorst) { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6051), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6052), " ", target.Name), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.Sabotage; this.PreviousTarget = this.TargetEmpire; break; } if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!AgentComponent.AutoTrain) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6053), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6054)), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.SabotageExp, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6051)," ", target.Name, Localizer.Token(6049)," ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6055), " ", target.Name), Owner); break; } } #endregion #region StealTech hard case AgentMission.StealTech: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (Target == null) return; List<string> PotentialUIDs = new List<string>(); foreach (KeyValuePair<string, TechEntry> entry in Target.GetTDict()) { //Added by McShooterz: Root nodes cannot be stolen if (!entry.Value.Unlocked || !Owner.HavePreReq(entry.Value.UID) || Owner.GetTDict()[entry.Value.UID].Unlocked || entry.Value.GetTech().RootNode == 1) { continue; } PotentialUIDs.Add(entry.Value.UID); } string theUID = ""; if (PotentialUIDs.Count != 0) { theUID = PotentialUIDs[HelperFunctions.GetRandomIndex(PotentialUIDs.Count)]; if (DiceRoll >= ResourceManager.AgentMissionData.StealTechRollPerfect) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.StealTechExpPerfect, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, Localizer.Token(6056), Target); } //Added by McShooterz: new acquire method, unlocks targets bonuses as well //Owner.UnlockTech(theUID); Owner.AcquireTech(theUID, Target); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6057), " ", Localizer.Token(ResourceManager.TechTree[theUID].NameIndex), Localizer.Token(6031)), Owner); this.TechStolen++; break; } else if (DiceRoll > ResourceManager.AgentMissionData.StealTechRollGood) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.StealTechExpGood, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6058), " ", Localizer.Token(ResourceManager.TechTree[theUID].NameIndex), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } //Added by McShooterz: new acquire method, unlocks targets bonuses as well //Owner.UnlockTech(theUID); Owner.AcquireTech(theUID, Target); Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6057), " ", Localizer.Token(ResourceManager.TechTree[theUID].NameIndex), Localizer.Token(6042)), Owner); this.TechStolen++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.StealTechRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.StealTechRollWorst) { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6059), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6050)), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.StealTech; this.PreviousTarget = this.TargetEmpire; break; } if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6060), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6061)), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6059), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6062)), Owner); break; } } else { this.AddExperience(ResourceManager.AgentMissionData.StealTechExp, Owner); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6063), " ", (ResourceManager.AgentMissionData.StealTechCost / 2).ToString(), " ", Localizer.Token(6064)), Owner); Empire owner = Owner; owner.Money += ResourceManager.AgentMissionData.StealTechCost / 2; break; } } #endregion #region Robbery case AgentMission.Robbery: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (Target == null) return; int amount = (int)(RandomMath.RandomBetween(1f, (float)Target.GetPlanets().Count * 10f) * (float)this.Level); if ((float)amount > Target.Money && Target.Money > 0f) { amount = (int)Target.Money; } else if (Target.Money <= 0f) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6066), " ", this.TargetEmpire, Localizer.Token(6067)), Owner); return; } if (DiceRoll >= ResourceManager.AgentMissionData.RobberyRollPerfect) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.RobberyExpPerfect, Owner); Empire money = Target; money.Money = money.Money - (float)amount; Empire empire = Owner; empire.Money = empire.Money + (float)amount; NotificationManager notificationManager2 = Ship.universeScreen.NotificationManager; object[] objArray = new object[] { this.Name, " ", Localizer.Token(6068), " ", amount, " ", Localizer.Token(6069), " ", this.TargetEmpire, Localizer.Token(6031) }; if (!spyMute) notificationManager2.AddAgentResultNotification(true, string.Concat(objArray), Owner); if (Target != EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { break; } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(amount, " ", Localizer.Token(6065)), Target); this.Robberies++; break; } else if (DiceRoll > ResourceManager.AgentMissionData.RobberyRollGood) { //Added by McShooterz this.AddExperience(ResourceManager.AgentMissionData.RobberyExpGood, Owner); Empire money1 = Target; money1.Money = money1.Money - (float)amount; Empire owner1 = Owner; owner1.Money = owner1.Money + (float)amount; if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(amount, " ", Localizer.Token(6070), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); NotificationManager notificationManager3 = Ship.universeScreen.NotificationManager; object[] name1 = new object[] { this.Name, " ", Localizer.Token(6068), " ", amount, " ", Localizer.Token(6069), " ", this.TargetEmpire, Localizer.Token(6042) }; if (!spyMute) notificationManager3.AddAgentResultNotification(true, string.Concat(name1), Owner); this.Robberies++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.RobberyRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.RobberyRollWorst) { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!AgentComponent.AutoTrain && !spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6071), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) if (!AgentComponent.AutoTrain) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6072)), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.Robbery; this.PreviousTarget = this.TargetEmpire; break; } if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6073), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6074), " ", this.TargetEmpire), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { this.AddExperience(ResourceManager.AgentMissionData.RobberyExp, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!AgentComponent.AutoTrain && !spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6071), Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) if (!AgentComponent.AutoTrain) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6075)), Owner); break; } } #endregion #region Rebellion case AgentMission.InciteRebellion: { this.Mission = AgentMission.Defending; this.MissionNameIndex = 2183; if (Target == null) return; if (Target.GetPlanets().Count == 0) { return; } target = EmpireManager.GetEmpireByName(this.TargetEmpire).GetPlanets()[HelperFunctions.GetRandomIndex(EmpireManager.GetEmpireByName(this.TargetEmpire).GetPlanets().Count)]; if (DiceRoll >= ResourceManager.AgentMissionData.RebellionRollPerfect) { this.AddExperience(ResourceManager.AgentMissionData.RebellionExpPerfect, Owner); if (!EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebellionLaunched) { Empire rebels = CreatingNewGameScreen.CreateRebelsFromEmpireData(EmpireManager.GetEmpireByName(this.TargetEmpire).data, EmpireManager.GetEmpireByName(this.TargetEmpire)); rebels.data.IsRebelFaction = true; rebels.data.Traits.Name = EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebelName; rebels.data.Traits.Singular = EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebelSing; rebels.data.Traits.Plural = EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebelPlur; rebels.isFaction = true; foreach (Empire e in EmpireManager.EmpireList) { e.GetRelations().Add(rebels, new Relationship(rebels.data.Traits.Name)); rebels.GetRelations().Add(e, new Relationship(e.data.Traits.Name)); } EmpireManager.EmpireList.Add(rebels); EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebellionLaunched = true; } Empire darebels = EmpireManager.GetEmpireByName(EmpireManager.GetEmpireByName(this.TargetEmpire).data.RebelName); for (int i = 0; i < 4; i++) { foreach (KeyValuePair<string, Troop> troop in ResourceManager.TroopsDict) { if (!EmpireManager.GetEmpireByName(this.TargetEmpire).WeCanBuildTroop(troop.Key)) { continue; } Troop t = ResourceManager.CreateTroop(troop.Value, darebels); t.Name = Localizer.Token(darebels.data.TroopNameIndex); t.Description = Localizer.Token(darebels.data.TroopDescriptionIndex); target.AssignTroopToTile(t); break; } } if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6078), " ", target.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6077), " ", target.Name, Localizer.Token(6031)), Owner); this.Rebellions++; break; } else if (DiceRoll > ResourceManager.AgentMissionData.RebellionRollGood) { this.AddExperience(ResourceManager.AgentMissionData.RebellionExpGood, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(Localizer.Token(6078), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6077), " ", target.Name, Localizer.Token(6079)), Owner); this.Rebellions++; break; } else if (DiceRoll < ResourceManager.AgentMissionData.RebellionRollBad) { if (DiceRoll >= ResourceManager.AgentMissionData.RebellionRollWorst) { if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6076), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6080), " ", target.Name), Owner); this.AssignMission(AgentMission.Recovering, Owner, ""); this.PrevisousMission = AgentMission.InciteRebellion; this.PreviousTarget = this.TargetEmpire; break; } if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6081), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying Failed", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6082), " ", target.Name), Owner); Owner.data.AgentList.QueuePendingRemoval(this); break; } else { this.AddExperience(ResourceManager.AgentMissionData.RebellionExp, Owner); if (Target == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(Localizer.Token(6076), " ", target.Name, Localizer.Token(6049), " ", Owner.data.Traits.Name), Target); } Target.GetRelations()[Owner].DamageRelationship(Target, Owner, "Caught Spying", 20f, null); if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(false, string.Concat(this.Name, " ", Localizer.Token(6083), " ", target.Name), Owner); break; } } #endregion #region Recovery case AgentMission.Recovering : { this.Mission = AgentMission.Defending; startingmission = this.PrevisousMission; this.TargetEmpire = this.PreviousTarget; this.MissionNameIndex = 2183; if (!spyMute) Ship.universeScreen.NotificationManager.AddAgentResultNotification(true, string.Concat(this.Name, " ", Localizer.Token(6086)), Owner); break; } #endregion } #region Mission Repeat if (Owner == EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty) && Mission == AgentMission.Defending && Owner.Money > 500 && AgentComponent.AutoTrain == true && (startingmission != AgentMission.Training || (startingmission == AgentMission.Training && this.Level < 10))) { this.AssignMission(startingmission, Owner, this.TargetEmpire); return; } this.TargetEmpire = ""; #endregion }
private float GetPop(Empire e) { float pop = 0f; foreach (Planet p in e.GetPlanets()) { pop = pop + p.Population; } return pop; }
public War(Empire us, Empire them, float StarDate) { this.StartDate = StarDate; this.Us = us; this.Them = them; this.UsName = us.data.Traits.Name; this.ThemName = them.data.Traits.Name; foreach (Ship ship in us.GetShips()) { War ourStartingStrength = this; ourStartingStrength.OurStartingStrength = ourStartingStrength.OurStartingStrength + ship.GetStrength(); foreach (Troop t in ship.TroopList) { War ourStartingGroundStrength = this; ourStartingGroundStrength.OurStartingGroundStrength = ourStartingGroundStrength.OurStartingGroundStrength + (float)t.Strength; } } foreach (Planet p in us.GetPlanets()) { War ourStartingColonies = this; ourStartingColonies.OurStartingColonies = ourStartingColonies.OurStartingColonies + 1; p.TroopsHere.thisLock.EnterReadLock(); foreach (Troop t in p.TroopsHere) { if (t.GetOwner() != us) { continue; } War war = this; war.OurStartingGroundStrength = war.OurStartingGroundStrength + (float)t.Strength; } p.TroopsHere.thisLock.ExitReadLock(); } foreach (Ship ship in them.GetShips()) { War theirStartingStrength = this; theirStartingStrength.TheirStartingStrength = theirStartingStrength.TheirStartingStrength + ship.GetStrength(); foreach (Troop t in ship.TroopList) { War theirStartingGroundStrength = this; theirStartingGroundStrength.TheirStartingGroundStrength = theirStartingGroundStrength.TheirStartingGroundStrength + (float)t.Strength; } } foreach (Planet p in them.GetPlanets()) { p.TroopsHere.thisLock.EnterReadLock(); foreach (Troop t in p.TroopsHere) { if (t.GetOwner() != them) { continue; } War theirStartingGroundStrength1 = this; theirStartingGroundStrength1.TheirStartingGroundStrength = theirStartingGroundStrength1.TheirStartingGroundStrength + (float)t.Strength; } p.TroopsHere.thisLock.ExitReadLock(); } foreach (KeyValuePair<Guid, SolarSystem> system in this.Us.GetUS().SolarSystemDict) { bool WeAreThere = false; bool TheyAreThere = false; if (system.Value.OwnerList.Contains(this.Us)) { WeAreThere = true; } if (system.Value.OwnerList.Contains(this.Them)) { TheyAreThere = true; } if (!WeAreThere || !TheyAreThere) { continue; } War startingNumContestedSystems = this; startingNumContestedSystems.StartingNumContestedSystems = startingNumContestedSystems.StartingNumContestedSystems + 1; this.ContestedSystemsGUIDs.Add(system.Key); } }
public void TriggerOutcome(Empire Triggerer, Outcome triggeredOutcome) { if (triggeredOutcome.SecretTechDiscovered != null) { if (GlobalStats.ActiveModInfo != null && GlobalStats.ActiveModInfo.overrideSecretsTree) { Triggerer.GetTDict()[triggeredOutcome.SecretTechDiscovered].Discovered = true; } else { Triggerer.GetTDict()["Secret"].Discovered = true; Triggerer.GetTDict()[triggeredOutcome.SecretTechDiscovered].Discovered = true; } } if (triggeredOutcome.BeginArmageddon) { GlobalStats.RemnantArmageddon = true; } if (triggeredOutcome.GrantArtifact) { List<Ship_Game.Artifact> Potentials = new List<Ship_Game.Artifact>(); foreach (KeyValuePair<string, Ship_Game.Artifact> Artifact in ResourceManager.ArtifactsDict) { if (Artifact.Value.Discovered) { continue; } Potentials.Add(Artifact.Value); } if (Potentials.Count <= 0) { triggeredOutcome.MoneyGranted = 500; } else { int ranart = (int)RandomMath.RandomBetween(0f, (float)Potentials.Count + 0.8f); if (ranart > Potentials.Count - 1) { ranart = Potentials.Count - 1; } Triggerer.data.OwnedArtifacts.Add(Potentials[ranart]); ResourceManager.ArtifactsDict[Potentials[ranart].Name].Discovered = true; triggeredOutcome.SetArtifact(Potentials[ranart]); if (triggeredOutcome.GetArtifact().DiplomacyMod > 0f) { RacialTrait traits = Triggerer.data.Traits; traits.DiplomacyMod = traits.DiplomacyMod + (triggeredOutcome.GetArtifact().DiplomacyMod + triggeredOutcome.GetArtifact().DiplomacyMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().FertilityMod > 0f) { EmpireData triggerer = Triggerer.data; triggerer.EmpireFertilityBonus = triggerer.EmpireFertilityBonus + triggeredOutcome.GetArtifact().FertilityMod; foreach (Planet planet in Triggerer.GetPlanets()) { Planet fertility = planet; fertility.Fertility = fertility.Fertility + (triggeredOutcome.GetArtifact().FertilityMod + triggeredOutcome.GetArtifact().FertilityMod * Triggerer.data.Traits.Spiritual); } } if (triggeredOutcome.GetArtifact().GroundCombatMod > 0f) { RacialTrait groundCombatModifier = Triggerer.data.Traits; groundCombatModifier.GroundCombatModifier = groundCombatModifier.GroundCombatModifier + (triggeredOutcome.GetArtifact().GroundCombatMod + triggeredOutcome.GetArtifact().GroundCombatMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ModuleHPMod > 0f) { RacialTrait modHpModifier = Triggerer.data.Traits; modHpModifier.ModHpModifier = modHpModifier.ModHpModifier + (triggeredOutcome.GetArtifact().ModuleHPMod + triggeredOutcome.GetArtifact().ModuleHPMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().PlusFlatMoney > 0f) { EmpireData flatMoneyBonus = Triggerer.data; flatMoneyBonus.FlatMoneyBonus = flatMoneyBonus.FlatMoneyBonus + (triggeredOutcome.GetArtifact().PlusFlatMoney + triggeredOutcome.GetArtifact().PlusFlatMoney * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ProductionMod > 0f) { RacialTrait productionMod = Triggerer.data.Traits; productionMod.ProductionMod = productionMod.ProductionMod + (triggeredOutcome.GetArtifact().ProductionMod + triggeredOutcome.GetArtifact().ProductionMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ReproductionMod > 0f) { RacialTrait reproductionMod = Triggerer.data.Traits; reproductionMod.ReproductionMod = reproductionMod.ReproductionMod + (triggeredOutcome.GetArtifact().ReproductionMod + triggeredOutcome.GetArtifact().ReproductionMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ResearchMod > 0f) { RacialTrait researchMod = Triggerer.data.Traits; researchMod.ResearchMod = researchMod.ResearchMod + (triggeredOutcome.GetArtifact().ResearchMod + triggeredOutcome.GetArtifact().ResearchMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().SensorMod > 0f) { EmpireData sensorModifier = Triggerer.data; sensorModifier.SensorModifier = sensorModifier.SensorModifier + (triggeredOutcome.GetArtifact().SensorMod + triggeredOutcome.GetArtifact().SensorMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ShieldPenBonus > 0f) { EmpireData shieldPenBonusChance = Triggerer.data; shieldPenBonusChance.ShieldPenBonusChance = shieldPenBonusChance.ShieldPenBonusChance + (triggeredOutcome.GetArtifact().ShieldPenBonus + triggeredOutcome.GetArtifact().ShieldPenBonus * Triggerer.data.Traits.Spiritual); } } } if (triggeredOutcome.UnlockTech != null) { if (!Triggerer.GetTDict()[triggeredOutcome.UnlockTech].Unlocked) { Triggerer.UnlockTech(triggeredOutcome.UnlockTech); } else { triggeredOutcome.WeHadIt = true; } } Empire money = Triggerer; money.Money = money.Money + (float)triggeredOutcome.MoneyGranted; RacialTrait racialTrait = Triggerer.data.Traits; racialTrait.ResearchMod = racialTrait.ResearchMod + triggeredOutcome.ScienceBonus; RacialTrait traits1 = Triggerer.data.Traits; traits1.ProductionMod = traits1.ProductionMod + triggeredOutcome.IndustryBonus; PlanetGridSquare assignedtile = null; if (triggeredOutcome.SelectRandomPlanet) { List<Planet> Potentials = new List<Planet>(); foreach (SolarSystem s in UniverseScreen.SolarSystemList) { foreach (Planet p in s.PlanetList) { if (!p.habitable || p.Owner != null) { continue; } Potentials.Add(p); } } if (Potentials.Count > 0) { triggeredOutcome.SetPlanet(Potentials[HelperFunctions.GetRandomIndex(Potentials.Count)]); } if (triggeredOutcome.GetPlanet() != null) { assignedtile = triggeredOutcome.GetPlanet().TilesList[17]; if (triggeredOutcome.SpawnBuildingOnPlanet != null) { Building b = ResourceManager.GetBuilding(triggeredOutcome.SpawnBuildingOnPlanet); triggeredOutcome.GetPlanet().AssignBuildingToSpecificTile(b, assignedtile); } } } if (assignedtile != null && triggeredOutcome.GetPlanet() != null && triggeredOutcome.TroopsToSpawn != null) { foreach (string troopname in triggeredOutcome.TroopsToSpawn) { Troop t = ResourceManager.CreateTroop(ResourceManager.TroopsDict[troopname], EmpireManager.GetEmpireByName("Unknown")); t.SetOwner(EmpireManager.GetEmpireByName("The Remnant")); if (triggeredOutcome.GetPlanet().AssignTroopToNearestAvailableTile(t, assignedtile)) { continue; } triggeredOutcome.GetPlanet().AssignTroopToTile(t); } } }
public void TriggerPlanetEvent(Planet p, Empire Triggerer, PlanetGridSquare eventLocation, Empire PlayerEmpire, UniverseScreen screen) { int ranMax = 0; int ranMin = 0; foreach (Outcome outcome in this.PotentialOutcomes) { if (outcome.onlyTriggerOnce && outcome.alreadyTriggered && Triggerer.isPlayer) { continue; } else { ranMax += outcome.Chance; } } int Random = (int)RandomMath.RandomBetween(ranMin, ranMax); Outcome triggeredOutcome = new Outcome(); int cursor = 0; foreach (Outcome outcome in this.PotentialOutcomes) { if (outcome.onlyTriggerOnce && outcome.alreadyTriggered && Triggerer.isPlayer) { continue; } else { cursor = cursor + outcome.Chance; if (Random > cursor) { continue; } triggeredOutcome = outcome; if (Triggerer.isPlayer) { outcome.alreadyTriggered = true; } break; } } if (triggeredOutcome != null) { if (triggeredOutcome.GrantArtifact) { List<Ship_Game.Artifact> Potentials = new List<Ship_Game.Artifact>(); foreach (KeyValuePair<string, Ship_Game.Artifact> Artifact in ResourceManager.ArtifactsDict) { if (Artifact.Value.Discovered) { continue; } Potentials.Add(Artifact.Value); } if (Potentials.Count <= 0) { triggeredOutcome.MoneyGranted = 500; } else { int ranart = (int)RandomMath.RandomBetween(0f, (float)Potentials.Count + 0.8f); if (ranart > Potentials.Count - 1) { ranart = Potentials.Count - 1; } Triggerer.data.OwnedArtifacts.Add(Potentials[ranart]); ResourceManager.ArtifactsDict[Potentials[ranart].Name].Discovered = true; triggeredOutcome.SetArtifact(Potentials[ranart]); if (triggeredOutcome.GetArtifact().DiplomacyMod > 0f) { RacialTrait traits = Triggerer.data.Traits; traits.DiplomacyMod = traits.DiplomacyMod + (triggeredOutcome.GetArtifact().DiplomacyMod + triggeredOutcome.GetArtifact().DiplomacyMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().FertilityMod > 0f) { EmpireData triggerer = Triggerer.data; triggerer.EmpireFertilityBonus = triggerer.EmpireFertilityBonus + triggeredOutcome.GetArtifact().FertilityMod; foreach (Planet planet in Triggerer.GetPlanets()) { Planet fertility = planet; fertility.Fertility = fertility.Fertility + (triggeredOutcome.GetArtifact().FertilityMod + triggeredOutcome.GetArtifact().FertilityMod * Triggerer.data.Traits.Spiritual); } } if (triggeredOutcome.GetArtifact().GroundCombatMod > 0f) { RacialTrait groundCombatModifier = Triggerer.data.Traits; groundCombatModifier.GroundCombatModifier = groundCombatModifier.GroundCombatModifier + (triggeredOutcome.GetArtifact().GroundCombatMod + triggeredOutcome.GetArtifact().GroundCombatMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ModuleHPMod > 0f) { RacialTrait modHpModifier = Triggerer.data.Traits; modHpModifier.ModHpModifier = modHpModifier.ModHpModifier + (triggeredOutcome.GetArtifact().ModuleHPMod + triggeredOutcome.GetArtifact().ModuleHPMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().PlusFlatMoney > 0f) { EmpireData flatMoneyBonus = Triggerer.data; flatMoneyBonus.FlatMoneyBonus = flatMoneyBonus.FlatMoneyBonus + (triggeredOutcome.GetArtifact().PlusFlatMoney + triggeredOutcome.GetArtifact().PlusFlatMoney * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ProductionMod > 0f) { RacialTrait productionMod = Triggerer.data.Traits; productionMod.ProductionMod = productionMod.ProductionMod + (triggeredOutcome.GetArtifact().ProductionMod + triggeredOutcome.GetArtifact().ProductionMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ReproductionMod > 0f) { RacialTrait reproductionMod = Triggerer.data.Traits; reproductionMod.ReproductionMod = reproductionMod.ReproductionMod + (triggeredOutcome.GetArtifact().ReproductionMod + triggeredOutcome.GetArtifact().ReproductionMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ResearchMod > 0f) { RacialTrait researchMod = Triggerer.data.Traits; researchMod.ResearchMod = researchMod.ResearchMod + (triggeredOutcome.GetArtifact().ResearchMod + triggeredOutcome.GetArtifact().ResearchMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().SensorMod > 0f) { EmpireData sensorModifier = Triggerer.data; sensorModifier.SensorModifier = sensorModifier.SensorModifier + (triggeredOutcome.GetArtifact().SensorMod + triggeredOutcome.GetArtifact().SensorMod * Triggerer.data.Traits.Spiritual); } if (triggeredOutcome.GetArtifact().ShieldPenBonus > 0f) { EmpireData shieldPenBonusChance = Triggerer.data; shieldPenBonusChance.ShieldPenBonusChance = shieldPenBonusChance.ShieldPenBonusChance + (triggeredOutcome.GetArtifact().ShieldPenBonus + triggeredOutcome.GetArtifact().ShieldPenBonus * Triggerer.data.Traits.Spiritual); } } } if (triggeredOutcome.BeginArmageddon) { GlobalStats.RemnantArmageddon = true; } foreach (string ship in triggeredOutcome.FriendlyShipsToSpawn) { Triggerer.ForcePoolAdd(ResourceManager.CreateShipAt(ship, Triggerer, p, true)); } foreach (string ship in triggeredOutcome.RemnantShipsToSpawn) { Ship tomake = ResourceManager.CreateShipAt(ship, EmpireManager.GetEmpireByName("The Remnant"), p, true); tomake.GetAI().DefaultAIState = AIState.Exterminate; } if (triggeredOutcome.UnlockTech != null) { if (!Triggerer.GetTDict()[triggeredOutcome.UnlockTech].Unlocked) { Triggerer.UnlockTech(triggeredOutcome.UnlockTech); } else { triggeredOutcome.WeHadIt = true; } } if (triggeredOutcome.RemoveTrigger) { p.BuildingList.Remove(eventLocation.building); eventLocation.building = null; } if (!string.IsNullOrEmpty(triggeredOutcome.ReplaceWith)) { eventLocation.building = ResourceManager.GetBuilding(triggeredOutcome.ReplaceWith); p.BuildingList.Add(eventLocation.building); } Empire money = Triggerer; money.Money = money.Money + (float)triggeredOutcome.MoneyGranted; RacialTrait racialTrait = Triggerer.data.Traits; racialTrait.ResearchMod = racialTrait.ResearchMod + triggeredOutcome.ScienceBonus; RacialTrait traits1 = Triggerer.data.Traits; traits1.ProductionMod = traits1.ProductionMod + triggeredOutcome.IndustryBonus; if (triggeredOutcome.TroopsGranted != null) { foreach (string troopname in triggeredOutcome.TroopsGranted) { Troop t = ResourceManager.CreateTroop(ResourceManager.TroopsDict[troopname], Triggerer); t.SetOwner(Triggerer); if (p.AssignTroopToNearestAvailableTile(t, eventLocation)) { continue; } p.AssignTroopToTile(t); } } if (triggeredOutcome.TroopsToSpawn != null) { foreach (string troopname in triggeredOutcome.TroopsToSpawn) { Troop t = ResourceManager.CreateTroop(ResourceManager.TroopsDict[troopname], EmpireManager.GetEmpireByName("Unknown")); t.SetOwner(EmpireManager.GetEmpireByName("Unknown")); if (p.AssignTroopToNearestAvailableTile(t, eventLocation)) { continue; } p.AssignTroopToTile(t); } } } if (Triggerer == PlayerEmpire) { screen.ScreenManager.AddScreen(new EventPopup(screen, PlayerEmpire, this, triggeredOutcome)); AudioManager.PlayCue("sd_notify_alert"); } }
public void AbsorbEmpire(Empire target) { foreach (Planet planet in target.GetPlanets()) { this.OwnedPlanets.Add(planet); planet.Owner = (Empire)null; planet.Owner = this; if (!planet.system.OwnerList.Contains(this)) { planet.system.OwnerList.Add(this); planet.system.OwnerList.Remove(target); } } foreach (KeyValuePair<Guid, SolarSystem> keyValuePair in Empire.universeScreen.SolarSystemDict) { foreach (Planet planet in keyValuePair.Value.PlanetList) { foreach (Troop troop in planet.TroopsHere) { if (troop.GetOwner() == target) troop.SetOwner(this); } } } target.GetPlanets().Clear(); foreach (Ship ship in (List<Ship>)target.GetShips()) { this.OwnedShips.Add(ship); ship.loyalty = this; ship.fleet = (Fleet)null; ship.GetAI().State = AIState.AwaitingOrders; ship.GetAI().OrderQueue.Clear(); } target.GetShips().Clear(); foreach (KeyValuePair<string, TechEntry> keyValuePair in target.GetTDict()) { if (keyValuePair.Value.Unlocked && !this.TechnologyDict[keyValuePair.Key].Unlocked) this.UnlockTech(keyValuePair.Key); } foreach (KeyValuePair<string, bool> keyValuePair in target.GetHDict()) { if (keyValuePair.Value) this.UnlockedHullsDict[keyValuePair.Key] = true; } foreach (KeyValuePair<string, bool> keyValuePair in target.GetTrDict()) { if (keyValuePair.Value) this.UnlockedTroopDict[keyValuePair.Key] = true; } foreach (Artifact artifact in target.data.OwnedArtifacts) { this.data.OwnedArtifacts.Add(artifact); this.AddArtifact(artifact); } target.data.OwnedArtifacts.Clear(); if ((double)target.Money > 0.0) { this.Money += target.Money; target.Money = 0.0f; } target.SetAsMerged(); this.ResetBorders(); this.UpdateShipsWeCanBuild(); if (this != EmpireManager.GetEmpireByName(Ship.universeScreen.PlayerLoyalty)) { this.data.difficulty = Difficulty.Brutal; lock (GlobalStats.TaskLocker) { foreach (MilitaryTask item_7 in (List<MilitaryTask>)this.GSAI.TaskList) item_7.EndTask(); this.GSAI.TaskList.ApplyPendingRemovals(); } this.GSAI.DefensiveCoordinator.DefensiveForcePool.Clear(); this.GSAI.DefensiveCoordinator.DefenseDict.Clear(); this.ForcePool.Clear(); //foreach (Ship s in (List<Ship>)this.OwnedShips) //.OrderByDescending(experience=> experience.experience).ThenBy(strength=> strength.BaseStrength)) for (int i = 0; i < this.OwnedShips.Count; i++) { Ship s = ((List<Ship>)this.OwnedShips)[i]; //added by gremlin Do not include 0 strength ships in defensive force pool s.GetAI().OrderQueue.Clear(); s.GetAI().State = AIState.AwaitingOrders; this.ForcePoolAdd(s); } if (this.data.Traits.Cybernetic != 0) { foreach (Planet planet in this.OwnedPlanets) { List<Building> list = new List<Building>(); foreach (Building building in planet.BuildingList) { if ((double)building.PlusFlatFoodAmount > 0.0 || (double)building.PlusFoodPerColonist > 0.0 || (double)building.PlusTerraformPoints > 0.0) list.Add(building); } foreach (Building b in list) planet.ScrapBuilding(b); } } } foreach (Agent agent in (List<Agent>)target.data.AgentList) { this.data.AgentList.Add(agent); agent.Mission = AgentMission.Defending; agent.TargetEmpire = (string)null; } target.data.AgentList.Clear(); target.data.AbsorbedBy = this.data.Traits.Name; this.CalculateScore(); }