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)); }
public void GoBackToHome(Caravan caravan) { CaravanAI caravanAI = caravan as CaravanAI; if (caravanAI != null && caravanAI.Home != null) { caravanAI.AddQueueAction(new CaravanArrivalAction_AIBackToHome(caravanAI.Home), caravanAI.Home.Tile); } else { Find.WorldObjects.Remove(caravan); } }
public void DoWinAttackers(Caravan caravan, float defendersPoints) { Find.WorldObjects.Remove(mapParent); CaravanAI caravanAI = caravan as CaravanAI; float damagePer100Power = defendersPoints / 100; AI.CaravanUtility.KillRandomPawns(caravan, damagePer100Power); AffectDepletionFromWar(caravan.Faction, (defendersPoints * DepletionMultiplier) * 0.6f, mapParent.Faction, defendersPoints * DepletionMultiplier); AI.CaravanUtility.CheckIfCaravanOverWeight(caravan); GoBackToHome(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); }
//Use this for intialization void Start() { caravans = new Dictionary<int, List<Card>>(); for (int i = 0; i != 6; i++) { caravans.Add(i, new List<Card>()); } for (int i = 0; i != 2; i++) { decks[i] = getDeck(); hands[i] = new List<Card>(); for (int j = 0; j != 5; j++) { int srcPos = decks[i].Count - 1; Card cardToMove = decks[i][srcPos]; decks[i].RemoveAt(srcPos); hands[i].Add(cardToMove); } } ai_instance = new CaravanAI(this); }