Beispiel #1
0
        public override void Arrived(Caravan caravan)
        {
            Map map = this.mapParent.Map;

            if (map == null)
            {
                return;
            }
            Pawn t = caravan.PawnsListForReading[0];
            CaravanDropInventoryMode dropInventoryMode = (!map.IsPlayerHome) ? CaravanDropInventoryMode.DoNotDrop : CaravanDropInventoryMode.UnloadIndividually;
            bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer);

            CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null);
            if (this.mapParent.def == WorldObjectDefOf.Ambush)
            {
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredAmbushMap".Translate(), "LetterCaravanEnteredAmbushMap".Translate(new object[]
                {
                    caravan.Label
                }).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null);
            }
            else if (caravan.IsPlayerControlled || this.mapParent.Faction == Faction.OfPlayer)
            {
                Messages.Message("MessageCaravanEnteredWorldObject".Translate(new object[]
                {
                    caravan.Label,
                    this.mapParent.Label
                }).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion, true);
            }
        }
        public override void Arrived(Caravan caravan)
        {
            Map map = this.mapParent.Map;

            if (map != null)
            {
                Pawn t = caravan.PawnsListForReading[0];
                CaravanDropInventoryMode dropInventoryMode = (CaravanDropInventoryMode)(map.IsPlayerHome ? 2 : 0);
                bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer);
                CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null);
                if (this.mapParent.def == WorldObjectDefOf.Ambush)
                {
                    Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
                    Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredAmbushMap".Translate(), "LetterCaravanEnteredAmbushMap".Translate(caravan.Label).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null);
                }
                else
                {
                    if (!caravan.IsPlayerControlled && this.mapParent.Faction != Faction.OfPlayer)
                    {
                        return;
                    }
                    Messages.Message("MessageCaravanEnteredWorldObject".Translate(caravan.Label, this.mapParent.Label).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion);
                }
            }
        }
Beispiel #3
0
        public override void Arrived(Caravan caravan)
        {
            Map map = mapParent.Map;

            if (map != null)
            {
                CaravanDropInventoryMode dropInventoryMode = map.IsPlayerHome ? CaravanDropInventoryMode.UnloadIndividually : CaravanDropInventoryMode.DoNotDrop;
                bool draftColonists = mapParent.Faction != null && mapParent.Faction.HostileTo(Faction.OfPlayer);
                if (caravan.IsPlayerControlled || mapParent.Faction == Faction.OfPlayer)
                {
                    Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(mapParent), "LetterCaravanEnteredMap".Translate(caravan.Label, mapParent).CapitalizeFirst(), LetterDefOf.NeutralEvent, caravan.PawnsListForReading);
                }
                CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists);
            }
        }
        public override void Arrived(Caravan caravan)
        {
            Map map = this.mapParent.Map;

            if (map == null)
            {
                return;
            }
            Pawn t = caravan.PawnsListForReading[0];
            CaravanDropInventoryMode dropInventoryMode = (!map.IsPlayerHome) ? CaravanDropInventoryMode.DoNotDrop : CaravanDropInventoryMode.UnloadIndividually;
            bool draftColonists = this.mapParent.Faction != null && this.mapParent.Faction.HostileTo(Faction.OfPlayer);

            CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, dropInventoryMode, draftColonists, null);
            if (caravan.IsPlayerControlled || this.mapParent.Faction == Faction.OfPlayer)
            {
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(this.mapParent), "LetterCaravanEnteredMap".Translate(caravan.Label, this.mapParent).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null);
            }
        }
 private static void CaravanEnter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop,
                                  bool draftColonists = false)
 {
     TacticUtils.TacticalGroups.RemoveCaravanGroup(caravan);
     TacticUtils.TacticalGroups.CreateOrJoinColony(caravan.PawnsListForReading, map);
 }
        public static void Enter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false)
        {
            tmpPawns.Clear();
            tmpPawns.AddRange(caravan.PawnsListForReading);
            for (int i = 0; i < tmpPawns.Count; i++)
            {
                IntVec3 loc = spawnCellGetter(tmpPawns[i]);
                GenSpawn.Spawn(tmpPawns[i], loc, map, Rot4.Random);
            }
            switch (dropInventoryMode)
            {
            case CaravanDropInventoryMode.DropInstantly:
                DropAllInventory(tmpPawns);
                break;

            case CaravanDropInventoryMode.UnloadIndividually:
            {
                for (int j = 0; j < tmpPawns.Count; j++)
                {
                    tmpPawns[j].inventory.UnloadEverything = true;
                }
                break;
            }
            }
            if (draftColonists)
            {
                DraftColonists(tmpPawns);
            }
            if (map.IsPlayerHome)
            {
                for (int k = 0; k < tmpPawns.Count; k++)
                {
                    if (tmpPawns[k].IsPrisoner)
                    {
                        tmpPawns[k].guest.WaitInsteadOfEscapingForDefaultTicks();
                    }
                }
            }
            caravan.RemoveAllPawns();
            if (!caravan.Destroyed)
            {
                caravan.Destroy();
            }
            tmpPawns.Clear();
        }
        public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null)
        {
            if (enterMode == CaravanEnterMode.None)
            {
                Log.Error("Caravan " + caravan + " tried to enter map " + map + " with enter mode " + enterMode);
                enterMode = CaravanEnterMode.Edge;
            }
            IntVec3 enterCell = GetEnterCell(caravan, map, enterMode, extraCellValidator);
            Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(enterCell, map);

            Enter(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists);
        }
        public static void EnterAndSpawn(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop,
                                         bool draftColonists = false, Predicate <IntVec3> extraValidator = null)
        {
            bool coastalSpawn = caravan.HasBoat();

            if (enterMode == CaravanEnterMode.None)
            {
                Log.Error(string.Concat(new object[]
                {
                    "Caravan ", caravan, " tried to enter map ", map, " with no enter mode. Defaulting to edge."
                }));
                enterMode = CaravanEnterMode.Edge;
            }
            List <Pawn> pawns = new List <Pawn>(caravan.PawnsListForReading).ToList();

            IntVec3             enterCell = pawns.NotNullAndAny(v => v.IsBoat()) ? GetWaterCell(caravan, map, CaravanEnterMode.Edge) : GetEnterCellVehicle(caravan, map, enterMode, extraValidator);
            Rot4                edge      = enterMode == CaravanEnterMode.Edge ? CellRect.WholeMap(map).GetClosestEdge(enterCell) : Rot4.North;
            Predicate <IntVec3> validator = (IntVec3 c) => coastalSpawn?GenGridVehicles.Standable(c, map) : GenGrid.Standable(c, map);

            Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, p, validator);

            SpawnVehicles(caravan, pawns, map, spawnCellGetter, edge, draftColonists);
        }
 public static void Enter(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false)
 {
     CaravanEnterMapUtility.tmpPawns.Clear();
     CaravanEnterMapUtility.tmpPawns.AddRange(caravan.PawnsListForReading);
     for (int i = 0; i < CaravanEnterMapUtility.tmpPawns.Count; i++)
     {
         IntVec3 loc = spawnCellGetter(CaravanEnterMapUtility.tmpPawns[i]);
         GenSpawn.Spawn(CaravanEnterMapUtility.tmpPawns[i], loc, map, Rot4.Random, WipeMode.Vanish, false);
     }
     if (dropInventoryMode == CaravanDropInventoryMode.DropInstantly)
     {
         CaravanEnterMapUtility.DropAllInventory(CaravanEnterMapUtility.tmpPawns);
     }
     else if (dropInventoryMode == CaravanDropInventoryMode.UnloadIndividually)
     {
         for (int j = 0; j < CaravanEnterMapUtility.tmpPawns.Count; j++)
         {
             CaravanEnterMapUtility.tmpPawns[j].inventory.UnloadEverything = true;
         }
     }
     if (draftColonists)
     {
         CaravanEnterMapUtility.DraftColonists(CaravanEnterMapUtility.tmpPawns);
     }
     if (map.IsPlayerHome)
     {
         for (int k = 0; k < CaravanEnterMapUtility.tmpPawns.Count; k++)
         {
             if (CaravanEnterMapUtility.tmpPawns[k].IsPrisoner)
             {
                 CaravanEnterMapUtility.tmpPawns[k].guest.WaitInsteadOfEscapingForDefaultTicks();
             }
         }
     }
     caravan.RemoveAllPawns();
     if (caravan.Spawned)
     {
         Find.WorldObjects.Remove(caravan);
     }
     CaravanEnterMapUtility.tmpPawns.Clear();
 }
        public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null)
        {
            if (enterMode == CaravanEnterMode.None)
            {
                Log.Error(string.Concat(new object[]
                {
                    "Caravan ",
                    caravan,
                    " tried to enter map ",
                    map,
                    " with enter mode ",
                    enterMode
                }), false);
                enterMode = CaravanEnterMode.Edge;
            }
            IntVec3 enterCell = CaravanEnterMapUtility.GetEnterCell(caravan, map, enterMode, extraCellValidator);
            Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(enterCell, map, 4);

            CaravanEnterMapUtility.Enter(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists);
        }
Beispiel #11
0
        public static void EnterSpawn(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter, CaravanDropInventoryMode caravanDropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = true)
        {
            List <Pawn>  pawns    = new List <Pawn>(caravan.PawnsListForReading).Where(x => ShipHarmony.IsShip(x)).ToList();
            MapExtension mapE     = MapExtensionUtility.GetExtensionToMap(map);
            Rot4         spawnDir = GetEdgeToSpawnBoatOn(caravan, map);

            for (int i = 0; i < pawns.Count; i++)
            {
                IntVec3 loc = CellFinderExtended.MiddleEdgeCell(spawnDir, map, pawns[i], (IntVec3 c) => GenGridShips.Standable(c, map, mapE) && !c.Fogged(map)); //Change back to spawnCellGetter later

                pawns[i].GetComp <CompShips>().Angle = 0;
                Pawn ship = GenSpawn.Spawn(pawns[i], loc, map, spawnDir.Opposite, WipeMode.Vanish, false) as Pawn;
                ship.drafter.Drafted = draftColonists ? true : false;
            }
            caravan.RemoveAllPawns();
            if (caravan.Spawned)
            {
                Find.WorldObjects.Remove(caravan);
            }
        }
Beispiel #12
0
        public static void Enter(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop,
                                 bool draftColonists = true, Predicate <IntVec3> extraValidator = null)
        {
            if (enterMode == CaravanEnterMode.None)
            {
                Log.Error(string.Concat(new object[]
                {
                    "Caravan ", caravan, " tried to enter map ", map, " with no enter mode. Defaulting to edge."
                }), false);
                enterMode = CaravanEnterMode.Edge;
            }
            //Ensure pawns are onboard till a fix for dock settling is done
            if (ShipHarmony.HasShip(caravan) && caravan.PawnsListForReading.Any(x => !ShipHarmony.IsShip(x)))
            {
                ShipHarmony.BoardAllCaravanPawns(caravan);
            }
            IntVec3 enterCell = GetWaterCell(caravan, map, CaravanEnterMode.Edge); //Caravan Enter Mode back to enterMode
            Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => p.ClampToMap(CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, 4), map);

            EnterMapUtilityBoats.EnterSpawn(caravan, map, spawnCellGetter, dropInventoryMode, draftColonists);
        }
        public static bool Prefix(Caravan caravan, Map map, CaravanEnterMode enterMode, CaravanDropInventoryMode dropInventoryMode = CaravanDropInventoryMode.DoNotDrop, bool draftColonists = false, Predicate <IntVec3> extraCellValidator = null)
        {
            if (enterMode == CaravanEnterMode.None)
            {
                Log.Error("Caravan " + caravan + " tried to enter map " + map + " with enter mode " + enterMode);
                enterMode = CaravanEnterMode.Edge;
            }
            Predicate <IntVec3>  wrapped         = (IntVec3 x) => (extraCellValidator == null || extraCellValidator(x)) && map.PawnKindCanEnter(caravan.pawns.InnerListForReading.First().kindDef);
            IntVec3              enterCell       = (IntVec3)GetEnterCellInfo.Invoke(null, new object[] { caravan, map, enterMode, wrapped });
            Func <Pawn, IntVec3> spawnCellGetter = (Pawn p) => CellFinderExtended.RandomSpawnCellForPawnNear(enterCell, map, p.kindDef);

            EnterWithFuncInfo.Invoke(null, new object[] { caravan, map, spawnCellGetter, dropInventoryMode, draftColonists });
            return(false);
        }