protected override bool GiveWorkerTo(FactionArmy army, War war) { List <FactionInteraction> enemyis = war.GetEnemyList(army.Faction); if (enemyis != null) { if (Find.WorldObjects.Settlements.Where(x => x.Faction == army.Faction.Faction).TryRandomElement(out Settlement yourSettlement)) { //Settlement target = null; //Observable.Start(() => TryFindEnemySettlement(yourSettlement, enemyis, out target)).ObserveOnMainThread().Subscribe(hasSettlement => //{ // if (hasSettlement) // { // bool showCaravanInfo = (war.DeclaredWarFaction == war.PlayerInteraction && war.AssaultFactions.Contains(army.Faction)) // || (war.DefendingFaction == war.PlayerInteraction && war.DefendingFactions.Contains(army.Faction)); // float points = army.Faction.Faction.def.techLevel.ThreatRangeFor().RandomInRange * (1 - army.DepletionFromWar); // CaravanAI caravanAI = CaravanAIMaker.MakeCaravan(GeneratePawns(army, points), army.Faction.Faction, yourSettlement.Tile, true, CaravanAIMaker.GetCaravanColor(yourSettlement.Faction, target.Faction), showCaravanInfo, showCaravanInfo, false); // caravanAI.Threat = points; // caravanAI.Home = yourSettlement; // caravanAI.AddQueueAction(new CaravanArrivalAction_AIAttackSettlement(target, war), target.Tile); // } //}); if (TryFindEnemySettlement(yourSettlement, enemyis, out Settlement target)) { bool showCaravanInfo = (war.DeclaredWarFaction == war.PlayerInteraction && war.AssaultFactions.Contains(army.Faction)) || (war.DefendingFaction == war.PlayerInteraction && war.DefendingFactions.Contains(army.Faction)); float points = army.Faction.Faction.def.techLevel.ThreatRangeFor().RandomInRange *(1 - army.DepletionFromWar); CaravanAI caravanAI = CaravanAIMaker.MakeCaravan(GeneratePawns(army, points), army.Faction.Faction, yourSettlement.Tile, true, CaravanAIMaker.GetCaravanColor(yourSettlement.Faction, target.Faction), showCaravanInfo, showCaravanInfo, false); caravanAI.Threat = points; caravanAI.Home = yourSettlement; caravanAI.ShowGizmos = false; caravanAI.AddQueueAction(new CaravanArrivalAction_AIAttackSettlement(target, war), target.Tile); } } } return(true); }