private void CaravanDelivery() { PawnGroupMakerParms pawnGroupMakerParms = new PawnGroupMakerParms { faction = SignedFaction.Faction, groupKind = PawnGroupKindDefOf.Trader, points = Rand.Range(300, 1000), tile = Settlement.Tile }; Caravan = CaravanAIMaker.MakeCaravan(PawnGroupMakerUtility.GeneratePawns(pawnGroupMakerParms), SignedFaction.Faction, Settlement.Tile, true, CaravanAIMaker.GetCaravanColor(SignedFaction.Faction, Faction.OfPlayer), true, true); TryGetRandomPawnGroupMaker(pawnGroupMakerParms, out PawnGroupMaker maker); foreach (var p in Caravan.PawnsListForReading) { p.inventory.innerContainer.Clear(); } GenerateCarriers(pawnGroupMakerParms, maker, Items, Caravan); Items.ForEach(item => { if (item is Pawn p) { Find.WorldPawns.PassToWorld(p); Caravan.AddPawn(p, false); } }); Items.Clear(); Caravan.pather.StartPath(DestinationMap.Tile, new CaravanArrivalAction_AIEnterCaravan(DestinationMap.Parent)); Find.LetterStack.ReceiveLetter("TradeSchedulingAgreementComp_CaravanFormedTitle".Translate(), "TradeSchedulingAgreementComp_CaravanFormedDesc".Translate(), LetterDefOf.PositiveEvent, new LookTargets(Caravan)); }
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); }