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();
        }