Ejemplo n.º 1
0
        protected override void ScatterAt(IntVec3 loc, Map map, int count = 1)
        {
            Faction  faction  = (map.ParentFaction != null && map.ParentFaction != Faction.OfPlayer) ? map.ParentFaction : Find.FactionManager.RandomEnemyFaction();
            CellRect cellRect = CellRect.CenteredOn(loc, 8, 8).ClipInsideMap(map);
            PrisonerWillingToJoinComp component = map.Parent.GetComponent <PrisonerWillingToJoinComp>();
            Pawn          singlePawnToSpawn     = (component == null || !component.pawn.Any) ? PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, faction) : component.pawn.Take(component.pawn[0]);
            ResolveParams resolveParams         = default(ResolveParams);

            resolveParams.rect    = cellRect;
            resolveParams.faction = faction;
            RimWorld.BaseGen.BaseGen.globalSettings.map = map;
            RimWorld.BaseGen.BaseGen.symbolStack.Push("prisonCell", resolveParams);
            RimWorld.BaseGen.BaseGen.Generate();
            ResolveParams resolveParams2 = default(ResolveParams);

            resolveParams2.rect              = cellRect;
            resolveParams2.faction           = faction;
            resolveParams2.singlePawnToSpawn = singlePawnToSpawn;
            resolveParams2.postThingSpawn    = delegate(Thing x)
            {
                MapGenerator.rootsToUnfog.Add(x.Position);
                ((Pawn)x).mindState.WillJoinColonyIfRescued = true;
            };
            RimWorld.BaseGen.BaseGen.globalSettings.map = map;
            RimWorld.BaseGen.BaseGen.symbolStack.Push("pawn", resolveParams2);
            RimWorld.BaseGen.BaseGen.Generate();
            MapGenerator.SetVar("RectOfInterest", cellRect);
        }
        private void SpawnAdditonalPrisoners(Map map)
        {
            PrisonerWillingToJoinComp component = parent.GetComponent <PrisonerWillingToJoinComp>();
            List <Pawn> prisoner = map.mapPawns.AllPawnsSpawned.Where(p => p.kindDef == PawnKindDefOf.Slave || p.IsPrisoner).ToList();
            DamageInfo  info     = new DamageInfo(DamageDefOf.Blunt, 20, 0);

            info.SetAllowDamagePropagation(true);

            for (int i = 0; i < prisoner.ToList().Count; i++)
            {
                prisoner[i].SetFaction(ally);
                prisoner[i].guest.SetGuestStatus(map.ParentFaction, true);
                prisoner[i].mindState.WillJoinColonyIfRescued = true;
                Pawn pawn = component == null || !component.pawn.Any ? PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, map.ParentFaction) : component.pawn.Take(component.pawn[0]);
                pawn.mindState.WillJoinColonyIfRescued = true;

                pawn.SetFaction(ally);
                IntVec3 result = CellFinder.RandomSpawnCellForPawnNear(prisoner[i % prisoner.ToList().Count].CellsAdjacent8WayAndInside().Where(x => x.Standable(map) && x.Walkable(map)).RandomElement(), map);
                if (result == null)
                {
                    Log.Warning("spawn pawn cell null");
                }
                pawn.guest.SetGuestStatus(map.ParentFaction, true);
                GenSpawn.Spawn(pawn, result, map);
                if (pawn.equipment != null && pawn.equipment.AllEquipmentListForReading.Count > 0)
                {
                    pawn.equipment.DestroyAllEquipment();
                }
                pawn.TakeDamage(info);
                prisoner[i % prisoner.ToList().Count].TakeDamage(info);
            }
        }
Ejemplo n.º 3
0
        protected override void ScatterAt(IntVec3 loc, Map map, int count = 1)
        {
            Faction faction;

            if (map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer)
            {
                faction = Find.FactionManager.RandomEnemyFaction(false, false, true, TechLevel.Undefined);
            }
            else
            {
                faction = map.ParentFaction;
            }
            CellRect cellRect = CellRect.CenteredOn(loc, 8, 8).ClipInsideMap(map);
            PrisonerWillingToJoinComp component = map.info.parent.GetComponent <PrisonerWillingToJoinComp>();
            Pawn singlePawnToSpawn;

            if (component != null && component.pawn.Any)
            {
                singlePawnToSpawn = component.pawn.Take(component.pawn[0]);
            }
            else
            {
                singlePawnToSpawn = PrisonerWillingToJoinQuestUtility.GeneratePrisoner(map.Tile, faction);
            }
            ResolveParams resolveParams = default(ResolveParams);

            resolveParams.rect         = cellRect;
            resolveParams.faction      = faction;
            BaseGen.globalSettings.map = map;
            BaseGen.symbolStack.Push("prisonCell", resolveParams);
            BaseGen.Generate();
            ResolveParams resolveParams2 = default(ResolveParams);

            resolveParams2.rect              = cellRect;
            resolveParams2.faction           = faction;
            resolveParams2.singlePawnToSpawn = singlePawnToSpawn;
            resolveParams2.postThingSpawn    = delegate(Thing x)
            {
                MapGenerator.rootsToUnfog.Add(x.Position);
                ((Pawn)x).mindState.willJoinColonyIfRescued = true;
            };
            BaseGen.globalSettings.map = map;
            BaseGen.symbolStack.Push("pawn", resolveParams2);
            BaseGen.Generate();
            MapGenerator.SetVar <CellRect>("RectOfInterest", cellRect);
        }