public void CheckWinner() { if (winner == CaravanBattleWinner.None) { int playerPawnsCount = Map.mapPawns.ColonistCount; List <Pawn> enemyPawns = Map.mapPawns.AllPawns.Where(x => x.Faction != null && x.Faction == aiFaction).ToList(); int enemyPawnsCount = enemyPawns == null ? 0 : enemyPawns.Count; if (playerPawnsCount == 0 && enemyPawnsCount > 0) { winner = CaravanBattleWinner.AI; Find.LetterStack.ReceiveLetter("CaravanBattlePlacePlace_Battle_WinnerAITitle".Translate(), "CaravanBattlePlacePlace_Battle_WinnerAIDesc".Translate(), LetterDefOf.NegativeEvent); caravanAI.pawns.Clear(); enemyPawns.ForEach(p => { p.DeSpawn(); Find.WorldPawns.PassToWorld(p); caravanAI.AddPawn(p, false); }); caravanAI.AddQueueAction(aiAction, caravanAI.pather.Destination); Find.WorldObjects.Add(caravanAI); } else if (playerPawnsCount > 0 && enemyPawnsCount == 0) { winner = CaravanBattleWinner.Player; Find.LetterStack.ReceiveLetter("CaravanBattlePlacePlace_Battle_WinnerPlayerTitle".Translate(), "CaravanBattlePlacePlace_Battle_WinnerPlayerDesc".Translate(), LetterDefOf.PositiveEvent); } } }
public static CaravanAI MakeCaravan(IEnumerable <Pawn> pawns, Faction faction, int startingTile, bool addToWorldPawnsIfNotAlready, Color color, bool showNeeds = false, bool showSocial = false, bool useFood = false, bool showItems = false) { if (startingTile < 0 && addToWorldPawnsIfNotAlready) { Log.Warning("Tried to create a caravan but chose not to spawn a caravan but pass pawns to world. This can cause bugs because pawns can be discarded."); } tmpPawns.Clear(); tmpPawns.AddRange(pawns); CaravanAI caravan = (CaravanAI)WorldObjectMaker.MakeWorldObject(MoreEvents.Events.WorldObjectsDefOfLocal.CaravanAI); if (startingTile >= 0) { caravan.Tile = startingTile; } caravan.SetFaction(faction); if (startingTile >= 0) { Find.WorldObjects.Add(caravan); } for (int i = 0; i < tmpPawns.Count; i++) { Pawn pawn = tmpPawns[i]; if (pawn.Dead) { Log.Warning("Tried to form a caravan with a dead pawn " + pawn); continue; } caravan.AddPawn(pawn, addToWorldPawnsIfNotAlready); if (addToWorldPawnsIfNotAlready && !pawn.IsWorldPawn()) { Find.WorldPawns.PassToWorld(pawn); } } caravan.Name = CaravanNameGenerator.GenerateCaravanName(caravan); tmpPawns.Clear(); caravan.SetUniqueId(Find.UniqueIDsManager.GetNextCaravanID()); caravan.ShowSocial = showSocial; caravan.ShowNeeds = showNeeds; caravan.UseFood = useFood; caravan.ShowItems = showItems; caravan.CaravanColor = color; return(caravan); }