public override IEnumerable <Gizmo> GetGizmos() { if (this.IsPlayerControlled) { Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandLaunchShip".Translate(); command_Action.defaultDesc = "CommandLaunchShipDesc".Translate(); command_Action.icon = DropShipUtility.LaunchSingleCommandTex; command_Action.action = delegate { SoundDef.Named("ShipTakeoff_SuborbitalLaunch").PlayOneShotOnCamera(); this.ships[0].StartChoosingDestination(this.ships[0], false); }; yield return(command_Action); if (Find.WorldSelector.SingleSelectedObject == this) { yield return(TravelingShipsUtility.ShipTouchdownCommand(this, true)); yield return(TravelingShipsUtility.ShipTouchdownCommand(this, false)); } FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this); if (factionBase != null && factionBase.CanTradeNow) { yield return(TravelingShipsUtility.TradeCommand(this)); } if (CaravanJourneyDestinationUtility.AnyJurneyDestinationAt(base.Tile)) { yield return(CaravanJourneyDestinationUtility.TakeOffCommand(base.Tile)); } } }
public static void FactionBasePostLoadInit(FactionBase factionBase) { if (factionBase.trader == null) { factionBase.trader = new FactionBase_TraderTracker(factionBase); } }
public static Command TradeCommand(LandedShip caravan) { Pawn bestNegotiator = CaravanVisitUtility.BestNegotiator(caravan); Command_Action command_Action = new Command_Action(); command_Action.defaultLabel = "CommandTrade".Translate(); command_Action.defaultDesc = "CommandTradeDesc".Translate(); command_Action.icon = DropShipUtility.TradeCommandTex; command_Action.action = delegate { FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(caravan); if (factionBase != null && factionBase.CanTradeNow) { caravan.UnloadCargoForTrading(); Find.WindowStack.Add(new Dialog_TradeFromShips(caravan, bestNegotiator, factionBase)); string empty = string.Empty; string empty2 = string.Empty; PawnRelationUtility.Notify_PawnsSeenByPlayer(factionBase.Goods.OfType <Pawn>(), ref empty, ref empty2, "LetterRelatedPawnsTradingWithFactionBase".Translate(), false); if (!empty2.NullOrEmpty()) { Find.LetterStack.ReceiveLetter(empty, empty2, LetterType.Good, factionBase, null); } } }; if (bestNegotiator == null) { command_Action.Disable("CommandTradeFailNoNegotiator".Translate()); } return(command_Action); }
public static Faction NewGeneratedFaction(FactionDef facDef) { Faction faction = new Faction(); faction.def = facDef; faction.loadID = Find.UniqueIDsManager.GetNextFactionID(); faction.colorFromSpectrum = FactionGenerator.NewRandomColorFromSpectrum(faction); if (!facDef.isPlayer) { if (facDef.fixedName != null) { faction.Name = facDef.fixedName; } else { faction.Name = NameGenerator.GenerateName(facDef.factionNameMaker, from fac in Find.FactionManager.AllFactionsVisible select fac.Name, false, null); } } faction.centralMelanin = Rand.Value; foreach (Faction item in Find.FactionManager.AllFactionsListForReading) { faction.TryMakeInitialRelationsWith(item); } if (!facDef.hidden && !facDef.isPlayer) { FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase); factionBase.SetFaction(faction); factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction, false, null); factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase); Find.WorldObjects.Add(factionBase); } faction.GenerateNewLeader(); return(faction); }
public void FactionTick() { if (Find.TickManager.TicksGame % 1001 == 0 && this != Faction.OfPlayer) { if (this.PlayerGoodwill < this.def.naturalColonyGoodwill.min) { this.AffectGoodwillWith(Faction.OfPlayer, (float)(this.def.goodwillDailyGain * 0.0)); } else if (this.PlayerGoodwill > this.def.naturalColonyGoodwill.max) { this.AffectGoodwillWith(Faction.OfPlayer, (float)((0.0 - this.def.goodwillDailyFall) * 0.0)); } } this.kidnapped.KidnappedPawnsTrackerTick(); for (int num = this.predatorThreats.Count - 1; num >= 0; num--) { PredatorThreat predatorThreat = this.predatorThreats[num]; if (predatorThreat.Expired) { this.predatorThreats.RemoveAt(num); if (predatorThreat.predator.Spawned) { predatorThreat.predator.Map.attackTargetsCache.UpdateTarget(predatorThreat.predator); } } } if (Find.TickManager.TicksGame % 1000 == 200 && this.IsPlayer) { if (NamePlayerFactionAndBaseUtility.CanNameFactionNow()) { FactionBase factionBase = Find.WorldObjects.FactionBases.Find(NamePlayerFactionAndBaseUtility.CanNameFactionBaseSoon); if (factionBase != null) { Find.WindowStack.Add(new Dialog_NamePlayerFactionAndBase(factionBase)); } else { Find.WindowStack.Add(new Dialog_NamePlayerFaction()); } } else { FactionBase factionBase2 = Find.WorldObjects.FactionBases.Find(NamePlayerFactionAndBaseUtility.CanNameFactionBaseNow); if (factionBase2 != null) { if (NamePlayerFactionAndBaseUtility.CanNameFactionSoon()) { Find.WindowStack.Add(new Dialog_NamePlayerFactionAndBase(factionBase2)); } else { Find.WindowStack.Add(new Dialog_NamePlayerFactionBase(factionBase2)); } } } } }
public override void PreMapGenerate() { FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase); factionBase.SetFaction(Find.GameInitData.playerFaction); factionBase.Tile = Find.GameInitData.startingTile; factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase); Find.WorldObjects.Add(factionBase); }
public override void Tick() { base.Tick(); FactionBase colony = Find.WorldObjects.ObjectsAt(worldTileElectedOn).OfType <FactionBase>().FirstOrDefault(); if (this.pawn.Dead || !PsychologyBase.ActivateElections() || colony == null || colony.Map.lordManager.lords.Find(l => l.LordJob is LordJob_Joinable_Election) != null) { this.pawn.health.RemoveHediff(this); } }
public override bool TryExecute(IncidentParms parms) { Map map = (Map)parms.target; FactionBase factionBase = Find.WorldObjects.ObjectsAt(map.Tile).OfType <FactionBase>().First(); int duration = Mathf.RoundToInt(this.def.durationDays.RandomInRange * GenDate.TicksPerDay); GameCondition cond = GameConditionMaker.MakeCondition(this.def.gameCondition, duration, 0); map.gameConditionManager.RegisterCondition(cond); Find.LetterStack.ReceiveLetter("LetterLabelNewElection".Translate(factionBase.Label), "LetterNewElection".Translate(factionBase.Label), LetterDefOf.Good, new TargetInfo(map.Center, map, false), null); return(true); }
public static void TeachingComplete(Pawn teacher, Building_TeachingSpot spot) { spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.finishing); spot.ChangeState(Building_TeachingSpot.State.lesson, Building_TeachingSpot.LessonState.finished); //altar.currentState = Building_SacrificialAltar.State.finished; FactionBase factionBase = (FactionBase)spot.Map.info.parent; Messages.Message("The lesson has finished.", TargetInfo.Invalid, MessageSound.Benefit); }
public Dialog_NamePlayerFactionBase(FactionBase factionBase) { this.factionBase = factionBase; if (factionBase.HasMap && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0) { this.suggestingPawn = factionBase.Map.mapPawns.FreeColonistsSpawned.RandomElement <Pawn>(); } this.curName = NameGenerator.GenerateName(Faction.OfPlayer.def.baseNameMakerPlayer, null, false, null); this.nameMessageKey = "NamePlayerFactionBaseMessage"; this.gainedNameMessageKey = "PlayerFactionBaseGainsName"; this.invalidNameMessageKey = "PlayerFactionBaseNameIsInvalid"; }
public Dialog_NamePlayerFactionAndBase(FactionBase factionBase) { this.factionBase = factionBase; if (factionBase.HasMap && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0) { base.suggestingPawn = factionBase.Map.mapPawns.FreeColonistsSpawned.RandomElement(); } base.curName = NameGenerator.GenerateName(Faction.OfPlayer.def.factionNameMakerPlayer, (Predicate <string>)null, false, (string)null); base.nameMessageKey = "NamePlayerFactionMessage"; base.invalidNameMessageKey = "PlayerFactionNameIsInvalid"; base.useSecondName = true; base.curSecondName = NameGenerator.GenerateName(Faction.OfPlayer.def.baseNameMakerPlayer, (Predicate <string>)null, false, (string)null); base.secondNameMessageKey = "NamePlayerFactionBaseMessage_NameFactionContinuation"; base.invalidSecondNameMessageKey = "PlayerFactionBaseNameIsInvalid"; base.gainedNameMessageKey = "PlayerFactionAndBaseGainsName"; }
internal void FindClosestHackableAlliedBase() { this.alliedBase = null; float minTileDistance = 10000; foreach (FactionBase factionBase in Find.WorldObjects.FactionBases.Where(x => !x.Faction.HostileTo(Faction.OfPlayer) && x.Faction.def.techLevel >= TechLevel.Industrial && x.Faction != Faction.OfPlayer)) { float distance = Find.WorldGrid.TraversalDistanceBetween(this.rootMap.Tile, factionBase.Tile); if (distance < minTileDistance) { this.alliedBase = factionBase; minTileDistance = distance; } } }
public override string GetInspectString() { StringBuilder stringBuilder = new StringBuilder(); if (this.Resting) { stringBuilder.Append("CaravanResting".Translate()); } else if (this.AllOwnersDowned) { stringBuilder.Append("AllCaravanMembersDowned".Translate()); } else if (this.pather.Moving) { if (this.pather.arrivalAction != null) { stringBuilder.Append(this.pather.arrivalAction.ReportString); } else { stringBuilder.Append("CaravanTraveling".Translate()); } } else { FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this); if (factionBase != null) { stringBuilder.Append("CaravanVisiting".Translate(new object[] { factionBase.Label })); } else { stringBuilder.Append("CaravanWaiting".Translate()); } } return(stringBuilder.ToString()); }
public static void GenerateFactionsIntoWorld() { int i = 0; foreach (FactionDef current in DefDatabase <FactionDef> .AllDefs) { for (int j = 0; j < current.requiredCountAtGameStart; j++) { Faction faction = FactionGenerator.NewGeneratedFaction(current); Find.FactionManager.Add(faction); if (!current.hidden) { i++; } } } while (i < 5) { FactionDef facDef = (from fa in DefDatabase <FactionDef> .AllDefs where fa.canMakeRandomly && Find.FactionManager.AllFactions.Count((Faction f) => f.def == fa) < fa.maxCountAtGameStart select fa).RandomElement <FactionDef>(); Faction faction2 = FactionGenerator.NewGeneratedFaction(facDef); Find.World.factionManager.Add(faction2); i++; } int num = GenMath.RoundRandom((float)Find.WorldGrid.TilesCount / 100000f * FactionGenerator.FactionBasesPer100kTiles.RandomInRange); num -= Find.WorldObjects.FactionBases.Count; for (int k = 0; k < num; k++) { Faction faction3 = (from x in Find.World.factionManager.AllFactionsListForReading where !x.def.isPlayer && !x.def.hidden select x).RandomElementByWeight((Faction x) => x.def.baseSelectionWeight); FactionBase factionBase = (FactionBase)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.FactionBase); factionBase.SetFaction(faction3); factionBase.Tile = TileFinder.RandomFactionBaseTileFor(faction3, false, null); factionBase.Name = FactionBaseNameGenerator.GenerateFactionBaseName(factionBase); Find.WorldObjects.Add(factionBase); } }
public void StartLesson(bool forced = false, String skills = "") { teacher = tempTeacher; if (this.Destroyed || !this.Spawned) { TeachingUtility.AbortLesson(null, "The spot is unavailable."); return; } if (!TeachingUtility.IsActorAvailable(this.teacher)) { TeachingUtility.AbortLesson(this, "TeacherUnavailableNamed".Translate(new object[] { this.teacher.LabelShort })); this.teacher = null; return; } FactionBase factionBase = (FactionBase)this.Map.info.parent; Messages.Message("LessonGathering".Translate(new object[] { factionBase.Label, teacher.LabelShort }) + skills, TargetInfo.Invalid, MessageSound.Standard); ChangeState(State.lesson, LessonState.started); //this.currentState = State.started; Job job = new Job(DefDatabase <JobDef> .GetNamed("TeachLesson"), this); teacher.jobs.jobQueue.EnqueueLast(job); teacher.jobs.EndCurrentJob(JobCondition.InterruptForced); TeachingUtility.GetLessonGroup(this, Map, forced); lastLessonTick = Find.TickManager.TicksGame; // HediffLeader hediff = TeachingUtility.leaderH(teacher); // if (hediff != null) hediff.lastLessonTick = Find.TickManager.TicksGame; GameComponent_ColonyLeadership comp = Utility.getCLComp(); if (comp != null) { comp.lastLessonTick = Find.TickManager.TicksGame; } }
private static bool CanNameFactionBase(FactionBase factionBase, int ticksPassed) { return(factionBase.Faction == Faction.OfPlayer && !factionBase.namedByPlayer && (float)ticksPassed / 60000.0 >= 3.0 && factionBase.HasMap && factionBase.Map.dangerWatcher.DangerRating != StoryDanger.High && factionBase.Map.mapPawns.FreeColonistsSpawnedCount != 0 && NamePlayerFactionAndBaseUtility.CanNameAnythingNow()); }
public static bool CanNameFactionBaseSoon(FactionBase factionBase) { return(NamePlayerFactionAndBaseUtility.CanNameFactionBase(factionBase, Find.TickManager.TicksGame - factionBase.creationGameTicks + 30000)); }
public override string GetInspectString() { StringBuilder stringBuilder = new StringBuilder(); if (this.Resting) { stringBuilder.Append("CaravanResting".Translate()); } else if (this.AnyPawnHasExtremeMentalBreak) { stringBuilder.Append("CaravanMemberMentalBreak".Translate(new object[] { this.FirstPawnWithExtremeMentalBreak.LabelShort })); } else if (this.AllOwnersDowned) { stringBuilder.Append("AllCaravanMembersDowned".Translate()); } else if (this.pather.Moving) { if (this.pather.arrivalAction != null) { stringBuilder.Append(this.pather.arrivalAction.ReportString); } else { stringBuilder.Append("CaravanTraveling".Translate()); } } else { FactionBase factionBase = CaravanVisitUtility.FactionBaseVisitedNow(this); if (factionBase != null) { stringBuilder.Append("CaravanVisiting".Translate(new object[] { factionBase.Label })); } else { stringBuilder.Append("CaravanWaiting".Translate()); } } if (this.pather.Moving) { stringBuilder.AppendLine(); stringBuilder.Append("CaravanEstimatedTimeToDestination".Translate(new object[] { CaravanArrivalTimeEstimator.EstimatedTicksToArrive(this, true).ToStringTicksToPeriod(true) })); } if (this.ImmobilizedByMass) { stringBuilder.AppendLine(); stringBuilder.Append("CaravanImmobilizedByMass".Translate()); } string text; if (CaravanPawnsNeedsUtility.AnyPawnOutOfFood(this, out text)) { stringBuilder.AppendLine(); stringBuilder.Append("CaravanOutOfFood".Translate()); if (!text.NullOrEmpty()) { stringBuilder.Append(" "); stringBuilder.Append(text); stringBuilder.Append("."); } } else { stringBuilder.AppendLine(); stringBuilder.Append("CaravanDaysOfFood".Translate(new object[] { this.DaysWorthOfFood.ToString("0.#") })); } stringBuilder.AppendLine(); stringBuilder.AppendLine(string.Concat(new string[] { "CaravanBaseMovementTime".Translate(), ": ", ((float)this.TicksPerMove / 2500f).ToString("0.##"), " ", "CaravanHoursPerTile".Translate() })); double actualTicksPerMove = ((double)this.TicksPerMove / 2500f) * (2500f + WorldPathGrid.CalculatedCostAt(base.Tile, false, -1f)); stringBuilder.Append("CurrentTileMovementTime".Translate() + ": " + ((int)actualTicksPerMove).ToStringTicksToPeriod(true)); return(stringBuilder.ToString()); }
public static void Named(FactionBase factionBase, string s) { factionBase.Name = s; factionBase.namedByPlayer = true; }
private bool ChoseWorldTarget(GlobalTargetInfo target) { int tile; if (this.parentLandedShip != null) { tile = this.parentLandedShip.Tile; } else { tile = this.Map.Tile; } bool canBomb = true; if (!target.IsValid) { Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput); return(false); } if (this.LaunchAsFleet) { List <int> distances = new List <int>(); for (int i = 0; i < DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Count; i++) { ShipBase ship = DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID)[i]; if (ship.compShip.cargoLoadingActive) { Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput); return(false); } int num = (Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile)); if (num > ship.MaxLaunchDistance(true)) { Messages.Message("MessageFleetLaunchImpossible".Translate(), MessageSound.RejectInput); return(false); } if (!(2 * num > ship.MaxLaunchDistance(true))) { canBomb = false; } } } else { int num = Find.WorldGrid.TraversalDistanceBetween(tile, target.Tile); if (num > this.MaxLaunchDistance(this.LaunchAsFleet)) { Messages.Message("MessageTransportPodsDestinationIsTooFar".Translate(new object[] { CompLaunchable.FuelNeededToLaunchAtDist((float)num).ToString("0.#") }), MessageSound.RejectInput); return(false); } if (!(2 * num > this.MaxLaunchDistance(true))) { canBomb = false; } } MapParent mapParent = target.WorldObject as MapParent; if (mapParent != null && mapParent.HasMap) { Map myMap = this.Map; Map map = mapParent.Map; Current.Game.VisibleMap = map; Targeter targeter = Find.Targeter; Action actionWhenFinished = delegate { if (Find.Maps.Contains(myMap)) { Current.Game.VisibleMap = myMap; } }; targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), delegate(LocalTargetInfo x) { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.TryLaunch(x.ToGlobalTargetInfo(map), PawnsArriveMode.Undecided, TravelingShipArrivalAction.EnterMapFriendly); }, null, actionWhenFinished, DropShipUtility.TargeterShipAttachment); return(true); } if (target.WorldObject is FactionBase && target.WorldObject.Faction != Faction.OfPlayer) { FactionBase factionBase = target.WorldObject as FactionBase; Find.WorldTargeter.closeWorldTabWhenFinished = false; List <FloatMenuOption> list = new List <FloatMenuOption>(); if (!target.WorldObject.Faction.HostileTo(Faction.OfPlayer)) { list.Add(new FloatMenuOption("VisitFactionBase".Translate(new object[] { target.WorldObject.Label }), delegate { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap); JumpToTargetUtility.CloseWorldTab(); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } list.Add(new FloatMenuOption("DropAtEdge".Translate(), delegate { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.TryLaunch(target, PawnsArriveMode.EdgeDrop, TravelingShipArrivalAction.EnterMapFriendly); JumpToTargetUtility.CloseWorldTab(); }, MenuOptionPriority.Default, null, null, 0f, null, null)); list.Add(new FloatMenuOption("DropInCenter".Translate(), delegate { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapFriendly); JumpToTargetUtility.CloseWorldTab(); }, MenuOptionPriority.Default, null, null, 0f, null, null)); list.Add(new FloatMenuOption("AttackFactionBaseAerial".Translate(), delegate { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.EnterMapAssault); JumpToTargetUtility.CloseWorldTab(); }, MenuOptionPriority.Default, null, null, 0f, null, null)); if (canBomb && (DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(x => x.installedTurrets.Any(y => y.Key.slotType == WeaponSystemType.Bombing && y.Value != null))) || this.loadedBombs.Any()) { list.Add(new FloatMenuOption("BombFactionBase".Translate(), delegate { if (!this.ReadyForTakeoff || this.LaunchAsFleet && DropShipUtility.currentShipTracker.ShipsInFleet(this.fleetID).Any(s => !s.ReadyForTakeoff)) { return; } this.performBombingRun = true; this.TryLaunch(target, PawnsArriveMode.CenterDrop, TravelingShipArrivalAction.BombingRun); JumpToTargetUtility.CloseWorldTab(); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } Find.WindowStack.Add(new FloatMenu(list)); return(true); } if (Find.World.Impassable(target.Tile)) { Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageSound.RejectInput); return(false); } this.TryLaunch(target, PawnsArriveMode.Undecided, TravelingShipArrivalAction.StayOnWorldMap); return(true); }
private void Arrived() { if (this.arrived) { return; } this.arrived = true; if (TravelingShipsUtility.TryAddToLandedFleet(this, this.destinationTile)) { return; } if (this.arrivalAction == TravelingShipArrivalAction.BombingRun) { MapParent parent = Find.World.worldObjects.MapParentAt(this.destinationTile); if (parent != null) { Messages.Message("MessageBombedSettlement".Translate(new object[] { parent.ToString(), parent.Faction.Name }), parent, MessageTypeDefOf.NeutralEvent); Find.World.worldObjects.Remove(parent); } this.SwitchOriginToDest(); //TravelingShips travelingShips = (TravelingShips)WorldObjectMaker.MakeWorldObject(ShipNamespaceDefOfs.TravelingSuborbitalShip); //travelingShips.ships.AddRange(this.ships); //travelingShips.Tile = this.destinationTile; //travelingShips.SetFaction(Faction.OfPlayer); //travelingShips.destinationTile = this.initialTile; //travelingShips.destinationCell = this.launchCell; //travelingShips.arriveMode = this.arriveMode; //travelingShips.arrivalAction = TravelingShipArrivalAction.EnterMapFriendly; //Find.WorldObjects.Add(travelingShips); //Find.WorldObjects.Remove(this); } else { Map map = Current.Game.FindMap(this.destinationTile); if (map != null) { this.SpawnShipsInMap(map, null); } else if (!this.LandedShipHasCaravanOwner) { for (int i = 0; i < this.ships.Count; i++) { this.ships[i].GetDirectlyHeldThings().ClearAndDestroyContentsOrPassToWorld(DestroyMode.Vanish); } this.RemoveAllPods(); Find.WorldObjects.Remove(this); Messages.Message("MessageTransportPodsArrivedAndLost".Translate(), new GlobalTargetInfo(this.destinationTile), MessageTypeDefOf.NegativeEvent); } else { FactionBase factionBase = Find.WorldObjects.FactionBases.Find((FactionBase x) => x.Tile == this.destinationTile); if (factionBase != null && factionBase.Faction != Faction.OfPlayer && this.arrivalAction != TravelingShipArrivalAction.StayOnWorldMap) { LongEventHandler.QueueLongEvent(delegate { Map map2 = GetOrGenerateMapUtility.GetOrGenerateMap(factionBase.Tile, Find.World.info.initialMapSize, null); ; string extraMessagePart = null; if (this.arrivalAction == TravelingShipArrivalAction.EnterMapAssault && !factionBase.Faction.HostileTo(Faction.OfPlayer)) { factionBase.Faction.SetHostileTo(Faction.OfPlayer, true); extraMessagePart = "MessageTransportPodsArrived_BecameHostile".Translate(new object[] { factionBase.Faction.Name }).CapitalizeFirst(); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; Current.Game.VisibleMap = map2; Find.CameraDriver.JumpToVisibleMapLoc(map2.Center); this.SpawnShipsInMap(map2, extraMessagePart); }, "GeneratingMapForNewEncounter", false, null); } else { this.SpawnCaravanAtDestinationTile(); } } } }
public void InitNewGame() { string str = GenText.ToCommaList(from mod in LoadedModManager.RunningMods select mod.ToString(), true); Log.Message("Initializing new game with mods " + str); if (this.maps.Any <Map>()) { Log.Error("Called InitNewGame() but there already is a map. There should be 0 maps..."); return; } if (this.initData == null) { Log.Error("Called InitNewGame() but init data is null. Create it first."); return; } MemoryUtility.UnloadUnusedUnityAssets(); DeepProfiler.Start("InitNewGame"); try { Current.ProgramState = ProgramState.MapInitializing; IntVec3 intVec = new IntVec3(this.initData.mapSize, 1, this.initData.mapSize); FactionBase factionBase = null; List <FactionBase> factionBases = Find.WorldObjects.FactionBases; for (int i = 0; i < factionBases.Count; i++) { if (factionBases[i].Faction == Faction.OfPlayer) { factionBase = factionBases[i]; break; } } if (factionBase == null) { Log.Error("Could not generate starting map because there is no any player faction base."); } this.tickManager.gameStartAbsTick = GenTicks.ConfiguredTicksAbsAtGameStart; Map visibleMap = MapGenerator.GenerateMap(intVec, factionBase, factionBase.MapGeneratorDef, factionBase.ExtraGenStepDefs, null); this.worldInt.info.initialMapSize = intVec; if (this.initData.permadeath) { this.info.permadeathMode = true; this.info.permadeathModeUniqueName = PermadeathModeUtility.GeneratePermadeathSaveName(); } PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism); this.FinalizeInit(); Current.Game.VisibleMap = visibleMap; Find.CameraDriver.JumpToVisibleMapLoc(MapGenerator.PlayerStartSpot); Find.CameraDriver.ResetSize(); if (Prefs.PauseOnLoad && this.initData.startedFromEntry) { LongEventHandler.ExecuteWhenFinished(delegate { this.tickManager.DoSingleTick(); this.tickManager.CurTimeSpeed = TimeSpeed.Paused; }); } Find.Scenario.PostGameStart(); if (Faction.OfPlayer.def.startingResearchTags != null) { foreach (string current in Faction.OfPlayer.def.startingResearchTags) { foreach (ResearchProjectDef current2 in DefDatabase <ResearchProjectDef> .AllDefs) { if (current2.HasTag(current)) { this.researchManager.InstantFinish(current2, false); } } } } GameComponentUtility.StartedNewGame(); this.initData = null; } finally { DeepProfiler.End(); } }