public static void Camp(Caravan caravan) { Faction faction = caravan.Faction; if (faction != Faction.OfPlayer) { Log.Error("Cannot camp with non-player faction.", false); return; } string randomSeed = Find.TickManager.TicksAbs.ToString(); int CampSize = Rand.Range(SetUpCampSettings.allowedSizeRange.min, SetUpCampSettings.allowedSizeRange.max); CaravanCamp camp = NewCaravanCamp(caravan.Tile, faction); LongEventHandler.QueueLongEvent(delegate() { GenerateNewMapWithSeed(caravan.Tile, new IntVec3(CampSize, 1, CampSize), randomSeed); }, "SetUpCamp_GeneratingCamp", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true); LongEventHandler.QueueLongEvent(delegate() { Map map = camp.Map; Thing t = caravan.PawnsListForReading[0]; CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Center, CaravanDropInventoryMode.DoNotDrop, false, (IntVec3 x) => x.GetRoom(map, RegionType.Set_Passable).CellCount >= 600); CameraJumper.TryJump(t); Find.TickManager.CurTimeSpeed = 0; Messages.Message("SetUpCampFormedCamp".Translate(), MessageTypeDefOf.PositiveEvent); }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true); }
private void DoEnter(Caravan caravan, Site site) { Pawn t = caravan.PawnsListForReading[0]; bool flag = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer); bool flag2 = !site.HasMap; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null); if (flag2) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, true, true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst()); LetterDef letterDef; LookTargets lookTargets; this.AppendThreatInfo(stringBuilder, site, orGenerateMap, out letterDef, out lookTargets); Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), stringBuilder.ToString(), letterDef ?? LetterDefOf.NeutralEvent, (!lookTargets.IsValid()) ? t : lookTargets, null, null); } else { Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), "LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null); } Map map = orGenerateMap; CaravanEnterMode enterMode = CaravanEnterMode.Edge; bool draftColonists = flag; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null); }
public override void DoEnter(Caravan caravan) { Pawn t = caravan.PawnsListForReading[0]; bool flag2 = !MapParent.HasMap; Verse.Map orGenerateMap = GetOrGenerateMap(MapParent.Tile, MapSize, null); if (flag2) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, Site).CapitalizeFirst()); Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {Site.Label}", stringBuilder.ToString(), LetterDefOf.NeutralEvent); } else { Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {Site.Label}", "LetterCaravanEnteredMap".Translate(caravan.Label, Site).CapitalizeFirst(), LetterDefOf.NeutralEvent, t); } Verse.Map map = orGenerateMap; IntVec3 enterPos = new IntVec3(82, 0, 5); CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => enterPos); DoomsdaySite site = (DoomsdaySite)MapParent; var comp = site.GetComponent <DoomsdayUltimatumComp>(); if (comp.HelpingFactions != null) { CacheAndChangeRelations(comp); GeneratePawns(comp, ref enterPos, map); } }
public static void Postfix(CaravanArrivalAction_VisitSettlement __instance, Caravan caravan, Settlement ___settlement) { if (!___settlement.HasMap) { LongEventHandler.QueueLongEvent(delegate() { var filePreset = SettlementGeneration.GetPresetFor(___settlement, out LocationDef locationDef); if (filePreset != null) { customSettlementGeneration = true; locationData = new LocationData { file = filePreset, locationDef = locationDef }; } Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(___settlement.Tile, null); CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, 0, true, null); if (filePreset != null) { SettlementGeneration.InitialiseLocationGeneration(orGenerateMap, filePreset, locationDef); } }, "GeneratingMapForNewEncounter", false, null, true); return; } Map orGenerateMap2 = GetOrGenerateMapUtility.GetOrGenerateMap(___settlement.Tile, null); CaravanEnterMapUtility.Enter(caravan, orGenerateMap2, CaravanEnterMode.Edge, 0, true, null); }
public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan) { if (Visitable) { var action = new Command_Action { icon = SettleUtility.SettleCommandTex, defaultLabel = "EnterCity".Translate(), defaultDesc = "EnterCityDesc".Translate(), action = () => { LongEventHandler.QueueLongEvent(() => { var orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(Tile, null); CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists: true); }, "GeneratingMapForNewEncounter", false, null); }, }; if (this.EnterCooldownBlocksEntering()) { action.disabled = true; action.disabledReason = "MessageEnterCooldownBlocksEntering".Translate(this.EnterCooldownDaysLeft().ToString("0.#")); } yield return(action); } foreach (var gizmo in base.GetCaravanGizmos(caravan)) { yield return(gizmo); } }
private void DoEnter(Caravan caravan, Site site) { Pawn t = caravan.PawnsListForReading[0]; bool flag = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer); bool flag2 = !site.HasMap; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null); Messages.Message("MessageCaravanArrivedAtDestination".Translate(new object[] { caravan.Label }).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion, true); if (flag2) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(new object[] { Faction.OfPlayer.def.pawnsPlural }), LetterDefOf.NeutralEvent, true, true); } Map map = orGenerateMap; CaravanEnterMode enterMode = CaravanEnterMode.Edge; bool draftColonists = flag; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null); }
public void DoEnter(Caravan caravan) { Pawn t = caravan.PawnsListForReading[0]; bool flag2 = !mapParent.HasMap; Verse.Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, MapSize, null); foreach (var a in orGenerateMap.areaManager.AllAreas) { Log.Message($"AREA --> {a.Label} --> {a} --> {a.TrueCount}"); } if (flag2) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, generator.ExpandLabel).CapitalizeFirst()); Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredShipCrash")} {generator.ExpandLabel}", stringBuilder.ToString(), LetterDefOf.NeutralEvent); } else { Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredShipCrash")} {generator.ExpandLabel}", "LetterCaravanEnteredMap".Translate(caravan.Label, generator.ExpandLabel).CapitalizeFirst(), LetterDefOf.NeutralEvent, t); } Verse.Map map = orGenerateMap; CaravanEnterMode enterMode = CaravanEnterMode.Edge; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop); }
public void SetPlace(CaravanAI caravanAI, Caravan playerCaravan, IntVec3 mapSize) { MapSize = mapSize; this.caravanAI = caravanAI; aiFaction = caravanAI.Faction; aiTarget = caravanAI.pather.Destination; aiAction = caravanAI.pather.ArrivalAction; this.playerCaravan = playerCaravan; List <Pawn> aiPawns = new List <Pawn>(caravanAI.pawns); caravanAI.Tile = Tile; playerCaravan.Tile = Tile; Map map = GetOrGenerateMap(Tile, MapSize, null); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 first, out IntVec3 second); CaravanEnterMapUtility.Enter(caravanAI, map, x => CellFinder.RandomSpawnCellForPawnNear(first, map), CaravanDropInventoryMode.DoNotDrop); CaravanEnterMapUtility.Enter(playerCaravan, map, x => CellFinder.RandomSpawnCellForPawnNear(second, map), CaravanDropInventoryMode.DoNotDrop); LordJob lordJob = new LordJob_AssaultColony(caravanAI.Faction, canKidnap: true, canTimeoutOrFlee: false); LordMaker.MakeNewLord(caravanAI.Faction, lordJob, map, aiPawns); winner = CaravanBattleWinner.None; Find.LetterStack.ReceiveLetter("CaravanBattlePlacePlace_BattleStarted".Translate(), "CaravanBattlePlacePlace_BattleDescription".Translate(playerCaravan.Name, caravanAI.Name), LetterDefOf.ThreatBig); }
internal void <> m__3() { Pawn t = this.caravan.PawnsListForReading[0]; Faction faction = this.faction; Faction ofPlayer = Faction.OfPlayer; FactionRelationKind kind = FactionRelationKind.Hostile; string reason = "GoodwillChangedReason_AttackedCaravan".Translate(); faction.TrySetRelationKind(ofPlayer, kind, true, reason, new GlobalTargetInfo?(t)); Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(this.caravan, new IntVec3(100, 1, 100), WorldObjectDefOf.AttackedNonPlayerCaravan); IntVec3 playerSpot; IntVec3 enemySpot; MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out playerSpot, out enemySpot); CaravanEnterMapUtility.Enter(this.caravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(playerSpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, true); List <Pawn> list = this.metCaravan.PawnsListForReading.ToList <Pawn>(); CaravanEnterMapUtility.Enter(this.metCaravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(enemySpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, false); LordMaker.MakeNewLord(this.faction, new LordJob_DefendAttackedTraderCaravan(list[0].Position), map, list); Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; CameraJumper.TryJumpAndSelect(t); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsGroupGeneric".Translate(new object[] { Faction.OfPlayer.def.pawnsPlural }), LetterDefOf.NeutralEvent, true, true); }
protected override bool TryExecuteWorker(IncidentParms parms) { if (parms.target is Map) { return(IncidentDefOf.TravelerGroup.Worker.TryExecute(parms)); } Caravan caravan = (Caravan)parms.target; if (!TryFindFaction(out Faction faction)) { return(false); } CameraJumper.TryJumpAndSelect(caravan); List <Pawn> pawns = GenerateCaravanPawns(faction); Caravan metCaravan = CaravanMaker.MakeCaravan(pawns, faction, -1, addToWorldPawnsIfNotAlready: false); string text = "CaravanMeeting".Translate(caravan.Name, faction.Name, PawnUtility.PawnKindsToCommaList(metCaravan.PawnsListForReading, useAnd: true)).CapitalizeFirst(); DiaNode diaNode = new DiaNode(text); Pawn bestPlayerNegotiator = BestCaravanPawnUtility.FindBestNegotiator(caravan); if (metCaravan.CanTradeNow) { DiaOption diaOption = new DiaOption("CaravanMeeting_Trade".Translate()); diaOption.action = delegate { Find.WindowStack.Add(new Dialog_Trade(bestPlayerNegotiator, metCaravan)); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(metCaravan.Goods.OfType <Pawn>(), "LetterRelatedPawnsTradingWithOtherCaravan".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent); }; if (bestPlayerNegotiator == null) { diaOption.Disable("CaravanMeeting_TradeIncapable".Translate()); } diaNode.options.Add(diaOption); } DiaOption diaOption2 = new DiaOption("CaravanMeeting_Attack".Translate()); diaOption2.action = delegate { LongEventHandler.QueueLongEvent(delegate { Pawn t = caravan.PawnsListForReading[0]; Faction faction3 = faction; Faction ofPlayer = Faction.OfPlayer; FactionRelationKind kind = FactionRelationKind.Hostile; string reason = "GoodwillChangedReason_AttackedCaravan".Translate(); faction3.TrySetRelationKind(ofPlayer, kind, canSendLetter: true, reason, t); Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(100, 1, 100), WorldObjectDefOf.AttackedNonPlayerCaravan); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerSpot, out IntVec3 enemySpot); CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(playerSpot, map, 12), CaravanDropInventoryMode.DoNotDrop, draftColonists: true); List <Pawn> list = metCaravan.PawnsListForReading.ToList(); CaravanEnterMapUtility.Enter(metCaravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(enemySpot, map, 12)); LordMaker.MakeNewLord(faction, new LordJob_DefendAttackedTraderCaravan(list[0].Position), map, list); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); CameraJumper.TryJumpAndSelect(t); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); }, "GeneratingMapForNewEncounter", doAsynchronously: false, null);
private static void CustomAttackNowNoLetter(Caravan caravan, Settlement settlement) { Map map = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null); if (!settlement.HasMap) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); } CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, true, null); Find.GoodwillSituationManager.RecalculateAll(true); }
public override void CaravanEnter(Caravan caravan, Map map) { if (UseMapSpawnPos) { CaravanEnterMapUtility.Enter(caravan, map, x => MapGeneratorDef.PawnsSpawnPos, CaravanDropInventoryMode.DoNotDrop); } else { CaravanEnterMode enterMode = CaravanEnterMode.Edge; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop); } }
private static void AttackNow(Caravan caravan, EnemyCaravan enemyCaravan) { Pawn t = caravan.PawnsListForReading[0]; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(enemyCaravan.Tile, null); string letterLabel = "LetterLabelCaravanEnteredEnemyBase".Translate(); string letterText = "LetterCaravanEnteredEnemyBase".Translate(caravan.Label, enemyCaravan.Label).CapitalizeFirst(); AffectRelationsOnAttacked(enemyCaravan, ref letterText); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref letterLabel, ref letterText, "LetterRelatedPawnsSettlement".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true); Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.NeutralEvent, t, enemyCaravan.Faction); CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists: true); }
public Map SetupCaravanAttackMap(Caravan caravan, List <Pawn> faction1, List <Pawn> faction2) { int num = 140; Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(num, 1, num), WorldObjectDefOf.Ambush); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 second); CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map), CaravanDropInventoryMode.DoNotDrop, draftColonists: true); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out second, out IntVec3 third); SpawnEnemies(second, third, faction1, faction2, map); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(faction1, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); return(map); }
public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan) { if (Visitable) { // TODO refactor if (!(this is Citadel)) { var enterLabel = Find.World.GetComponent <WorldComponent_QuestTracker>().quests .Where(q => q.Targets != null && q.Targets.targets.Contains(this)) .Select(q => q.def.EnterCityLabel) .FirstOrDefault() ?? "EnterCity".Translate(); var action = new Command_Action { icon = SettleUtility.SettleCommandTex, defaultLabel = enterLabel, defaultDesc = "EnterCityDesc".Translate(), action = () => { LongEventHandler.QueueLongEvent(() => { var orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(Tile, null); CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, true); }, "GeneratingMapForNewEncounter", false, null); }, }; if (this.EnterCooldownBlocksEntering()) { action.disabled = true; action.disabledReason = "MessageEnterCooldownBlocksEntering".Translate(this.EnterCooldownDaysLeft().ToString("0.#")); } yield return(action); } if (!Abandoned) { yield return(CaravanVisitUtility.TradeCommand(caravan)); } } foreach (var gizmo in base.GetCaravanGizmos(caravan)) { if (gizmo is Command command && command.defaultLabel == "CommandTrade".Translate()) { continue; } yield return(gizmo); } }
protected override bool TryExecuteWorker(IncidentParms parms) { if (parms.target is Map) { return(IncidentDefOf.TravelerGroup.Worker.TryExecute(parms)); } Caravan caravan = (Caravan)parms.target; CameraJumper.TryJumpAndSelect(caravan); string text = "RealRuins.CaravanFoundRuins".Translate(caravan.Name).CapitalizeFirst(); DiaNode diaNode = new DiaNode(text); DiaOption diaOptionInvestigate = new DiaOption("RealRuins.CaravanFoundRuins.Investigate".Translate()); DiaOption diaOptionMoveOn = new DiaOption("CaravanMeeting_MoveOn".Translate()); diaOptionInvestigate.action = delegate { LongEventHandler.QueueLongEvent(delegate { Pawn t = caravan.PawnsListForReading[0]; /*Site site = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, (RimWorld.SitePartDef) null, caravan.Tile, null); * site.sitePartsKnown = true; * site.GetComponent<TimeoutComp>().StartTimeout(3 * 60000); * Find.WorldObjects.Add(site); */ Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(120, 1, 120), DefDatabase <WorldObjectDef> .GetNamed("CaravanSmallRuinsWorldObject")); CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge); CameraJumper.TryJumpAndSelect(t); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); }, "GeneratingMapForNewEncounter", false, null); }; diaOptionInvestigate.resolveTree = true; diaOptionMoveOn.resolveTree = true; diaNode.options.Add(diaOptionInvestigate); diaNode.options.Add(diaOptionMoveOn); string diaTitle = "RealRuins.CaravanFoundRuinsTitle".Translate(caravan.Label); WindowStack windowStack = Find.WindowStack; windowStack.Add(new Dialog_NodeTree(diaNode, true, false, diaTitle)); Find.Archive.Add(new ArchivedDialog(diaNode.text, diaTitle)); return(true); }
private void DoEnter(Caravan caravan, Site site) { Pawn t = caravan.PawnsListForReading[0]; bool flag = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer); Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, MapSize, null); Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredRuins".Translate(), "LetterCaravanEnteredRuins".Translate(caravan.Label).CapitalizeFirst(), LetterDefOf.ThreatBig, t, null, null); Map map = orGenerateMap; CaravanEnterMode enterMode = CaravanEnterMode.Edge; bool draftColonists = flag; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null); }
public void DoEnter(Caravan caravan) { Pawn t = caravan.PawnsListForReading[0]; bool flag2 = !mapParent.HasMap; Verse.Map map = GetOrGenerateMap(mapParent.Tile, MapSize, null); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); Find.LetterStack.ReceiveLetter("Quest_MissingPeople_EnterToMapTitle".Translate(), "Quest_MissingPeople_EnterToMap".Translate(), LetterDefOf.NeutralEvent); CaravanEnterMode enterMode = CaravanEnterMode.Edge; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop); Quest.UnlimitedTime = true; }
private void DoEnter(Caravan caravan, Site site) { Pawn t = caravan.PawnsListForReading[0]; bool flag = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer); Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null); Map map = orGenerateMap; CaravanEnterMode enterMode = CaravanEnterMode.Edge; bool draftColonists = flag; CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null); if (flag) { Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; } Messages.Message("MessageCaravanArrivedAtDestination".Translate(caravan.Label).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion); }
public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan) { foreach (var gizmo in base.GetCaravanGizmos(caravan)) { yield return(gizmo); } yield return(new Command_Action { defaultLabel = "FilUnderscore.PersistentRimWorlds.Command.BaseResettle".Translate(), defaultDesc = "FilUnderscore.PersistentRimWorlds.Command.BaseResettle.Desc".Translate(), icon = BaseResettleCommand, action = delegate { Find.WindowStack.Add(new Dialog_MessageBox("Resettle, Roll the Dice and see whether it will be overtaken by enemy base already.", "Dismiss")); /* * Settlement resettledHome = SettleUtility.AddNewHome(caravan.Tile, caravan.Faction); * * var map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, Find.World.info.initialMapSize, * null); * * // Roll dice. * * MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out var spot, out var second); * CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(spot, map, 4), CaravanDropInventoryMode.DoNotDrop, false); * CameraJumper.TryJump(caravan.PawnsListForReading[0]); */ var map = Current.Game.FindMap(caravan.Tile); var daysAway = 200 - 10; foreach (var thing in map.listerThings.ThingsInGroup(ThingRequestGroup.BuildingArtificial)) { if (Rand.Chance(0.005f * daysAway)) { thing.TakeDamage(new DamageInfo(DamageDefOf.Deterioration, Rand.Range(0, thing.MaxHitPoints * 1.5F))); } } Find.WorldObjects.Remove(Find.WorldObjects.WorldObjectAt(caravan.Tile, WorldObjectDefOf.AbandonedSettlement)); SettleInExistingMapUtility.Settle(map); CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge); } }); }
private void Outcome_Disaster(Caravan caravan) { Faction.TryAffectGoodwillWith(Faction.OfPlayer, -40); bool chance = Rand.Chance(0.5f); Settlement s = chance ? Set1 : Set2; Settlement turncoat = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement); turncoat.SetFaction(Find.FactionManager.AllFactionsVisible.Where(f => !f.IsPlayer && f.HostileTo(Faction.OfPlayer)).RandomElementWithFallback(null)); turncoat.Tile = s.Tile; turncoat.Name = s.Name; if (turncoat.Faction == null) { Outcome_Fail(caravan); return; } Settlement friendly = chance ? Set2 : Set1; Find.WorldObjects.Remove(s); Find.WorldObjects.Remove(chance ? Set2 : Set1); Find.WorldObjects.Add(turncoat); Site ambush = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, SitePartDefOf.AmbushEdge, Tile, turncoat.Faction, true, StorytellerUtility.DefaultSiteThreatPointsNow()); Find.LetterStack.ReceiveLetter("LetterLabelDisputeDisaster".Translate(), "DisputeDisaster".Translate(turncoat, turncoat.Faction, friendly) , LetterDefOf.ThreatBig, turncoat, null, "Disaster"); LongEventHandler.QueueLongEvent(new Action(() => { MapGenerator.GenerateMap(new IntVec3(110, 1, 110), ambush, MapGeneratorDefOf.Encounter); List <PawnKindDef> kindDefs = new List <PawnKindDef>(); for (int i = 0; i < 2; i++) { kindDefs.Clear(); Lord lord = LordMaker.MakeNewLord(i == 0 ? turncoat.Faction : Faction, new LordJob_AssaultColony(i == 0 ? turncoat.Faction : Faction), ambush.Map); kindDefs = Utilities.GeneratePawnKindDef(45, i == 0 ? turncoat.Faction : Faction); // Balance IntVec3 vec = CellFinder.RandomClosewalkCellNear(new IntVec3(ambush.Map.Center.x - 30 + (i * 60), ambush.Map.Center.y, ambush.Map.Center.z), ambush.Map, 10); Utilities.GenerateFighter(StorytellerUtility.DefaultSiteThreatPointsNow() + 300, lord, kindDefs, ambush.Map, i == 0 ? turncoat.Faction : Faction, vec); } CaravanEnterMapUtility.Enter(caravan, ambush.Map, CaravanEnterMode.Center, CaravanDropInventoryMode.DoNotDrop, true); }), "GeneratingMapForNewEncounter", false, null); Utilities.FactionsWar().GetByFaction(turncoat.Faction).resources += FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2; Utilities.FactionsWar().GetByFaction(friendly.Faction).resources -= FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2; Find.WorldObjects.Remove(this); }
static void Postfix(Caravan __result) { if (VesselManager.FormVessel) { __result.def.selectable = false; Vessel factionBase = (Vessel)WorldObjectMaker.MakeWorldObject(DefDatabase <WorldObjectDef> .GetNamed("Vessel")); factionBase.caravan = __result; factionBase.Tile = __result.Tile; factionBase.SetFaction(Faction.OfPlayer); Find.WorldObjects.Add((WorldObject)factionBase); factionBase.structure = new Vessel_Structure(VesselManager.ActiveShipyard); WaterGenerator.cachedStructure = factionBase.structure; Map newMap; newMap = GetOrGenerateMapUtility.GetOrGenerateMap(__result.Tile, Find.World.info.initialMapSize, null); //ISSUE: pawns are placed at the center of the map, which may or may not be a valid location //ISSUE: weather warning message CaravanEnterMapUtility.Enter(__result, newMap, (Func <Pawn, IntVec3>)(p => factionBase.Map.Center)); } }
public static void Camp(Caravan caravan) { float PawnScore = CaravanPawnsCountScore(caravan); string randomSeed = new System.Random().Next(1, 99999999).ToString(); int CampSize = new System.Random().Next(SetUpCampSettings.allowedSizeRange.min, SetUpCampSettings.allowedSizeRange.max); //float num4 = Mathf.Max(PawnScore * EnemyPointsPerCaravanPawnsScoreRange.RandomInRange, 45f); Pawn pawn = caravan.PawnsListForReading[0]; tmpCaravanPawns.Clear(); tmpCaravanPawns.AddRange(caravan.PawnsListForReading); Map map = GenerateNewMapWithSeed(caravan, new IntVec3(CampSize, 1, CampSize), randomSeed); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 intVec); CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map, 4), 0, true); tmpCaravanPawns.Clear(); CameraJumper.TryJumpAndSelect(pawn); Find.TickManager.CurTimeSpeed = 0; Messages.Message("SetUpCampFormedCamp".Translate(), MessageTypeDefOf.PositiveEvent); }
public virtual void DoEnter(Caravan caravan, MapParent mapParent) { Pawn t = caravan.PawnsListForReading[0]; Verse.Map orGenerateMap = GetOrGenerateMap(Tile, GetMapSize(), mapParent, null); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, "EnteredToRandomPlace".Translate()).CapitalizeFirst()); Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {"EnteredToRandomPlace".Translate()}", stringBuilder.ToString(), LetterDefOf.NeutralEvent); CaravanEnterMode enterMode = CaravanEnterMode.Edge; if (RandomPlaceDef.UseMapSpawnSpot) { CaravanEnterMapUtility.Enter(caravan, orGenerateMap, (Pawn p) => RandomPlaceDef.Map.PawnsSpawnPos, CaravanDropInventoryMode.DoNotDrop); } else { CaravanEnterMapUtility.Enter(caravan, orGenerateMap, enterMode, CaravanDropInventoryMode.DoNotDrop); } }
// Token: 0x0600000A RID: 10 RVA: 0x0000218C File Offset: 0x0000038C public static void Camp(Caravan caravan) { SetUpCampSettings settings = LoadedModManager.GetMod <SetUpCamp>().GetSettings <SetUpCampSettings>(); int minSize = SetUpCampSettings.MinSize; int maxSize = SetUpCampSettings.MaxSize; float num = CaravanPawnsCountScore(caravan); int num2 = Mathf.RoundToInt(num * 900f); int num3 = new System.Random().Next(minSize, maxSize); float num4 = Mathf.Max(num * EnemyPointsPerCaravanPawnsScoreRange.RandomInRange, 45f); Pawn pawn = caravan.PawnsListForReading[0]; tmpCaravanPawns.Clear(); tmpCaravanPawns.AddRange(caravan.PawnsListForReading); Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(num3, 1, num3), DefDatabase <WorldObjectDef> .GetNamed("CaravanCamp", true)); MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 intVec); CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map, 4), 0, true); tmpCaravanPawns.Clear(); CameraJumper.TryJumpAndSelect(pawn); Find.TickManager.CurTimeSpeed = 0; Messages.Message("The caravan formed a camp.", MessageTypeDefOf.TaskCompletion); }
protected bool Execute(Caravan caravan) { Map map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, DefDatabase <WorldObjectDef> .GetNamed("WanderingCaravanEncounter")); if (!WanderingCaravansUtility.AllWanderingCaravansSpawnableInMap(map).TryRandomElement(out PawnKindDef wanderingCaravanDef)) { return(false); } MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 caravanSpot, out IntVec3 wanderingCaravansSpot); IEnumerable <Pawn> wanderingCaravans = this.GenerateWanderingCaravans(wanderingCaravanDef); Pawn infoPawn = wanderingCaravans.First(); DiaNode diaNode = new DiaNode($"A wandering {infoPawn.LabelCap} has been spotted in the distance by {caravan.LabelCap}, with more wandering caravans possible following it.\n\nYou can " + $"ignore them, or you can tame or kill them to obtain their potentially valuable inventory.") { options = { new DiaOption("Go and claim their inventory") { action = delegate { string plural = wanderingCaravans.Count() > 1 ? "ies" : "y"; CaravanEnterMapUtility.Enter(caravan, map, pawn => CellFinder.RandomSpawnCellForPawnNear(caravanSpot, map)); Messages.Message($"You have {TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000)} to claim the wandering {infoPawn.LabelCap}s inventor{plural} before the " + $"caravan is reformed.", infoPawn, MessageTypeDefOf.PositiveEvent); ((WorldObject)map.ParentHolder).GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown(); }, resolveTree = true }, new DiaOption("Ignore them and continue") { resolveTree = true } } }; Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, false, $"Wandering {infoPawn.LabelCap} spotted")); this.SpawnPawns(wanderingCaravans, map, wanderingCaravansSpot); return(true); }
public override void DoEnter(Caravan caravan) { Pawn t = caravan.PawnsListForReading[0]; bool flag2 = !MapParent.HasMap; Verse.Map orGenerateMap = GetOrGenerateMap(MapParent.Tile, MapSize, null); if (flag2) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, questSite.Label).CapitalizeFirst()); Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {questSite.Label}", stringBuilder.ToString(), LetterDefOf.NeutralEvent); } else { Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {questSite.Label}", "LetterCaravanEnteredMap".Translate(caravan.Label, questSite.Label).CapitalizeFirst(), LetterDefOf.NeutralEvent, t); } Verse.Map map = orGenerateMap; IntVec3 spawnPos = new IntVec3(33, 0, 4); CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => spawnPos); }
protected bool Execute(Caravan caravan) { Map map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, DefDatabase <WorldObjectDef> .GetNamed("WanderingCaravanEncounter")); if (!WanderingCaravansUtility.AllWanderingCaravansSpawnableInMap(map).TryRandomElement(out PawnKindDef wanderingCaravanDef)) { return(false); } MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 caravanSpot, out IntVec3 wanderingCaravansSpot); IEnumerable <Pawn> wanderingCaravans = this.GenerateWanderingCaravans(wanderingCaravanDef); Pawn infoPawn = wanderingCaravans.First(); DiaNode diaNode = new DiaNode($"WanderingCaravan.WanderingCaravan_Spotted".Translate(infoPawn.LabelCap, caravan.LabelCap)) { options = { new DiaOption("WanderingCaravan.WanderingCaravan_Accept") { action = delegate { string plural = wanderingCaravans.Count() > 1 ? "ies" : "y"; CaravanEnterMapUtility.Enter(caravan, map, pawn => CellFinder.RandomSpawnCellForPawnNear(caravanSpot, map)); Messages.Message($"WanderingCaravan.WanderingCaravan_Accepted".Translate(TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000), infoPawn.LabelCap, plural), infoPawn, MessageTypeDefOf.PositiveEvent); ((WorldObject)map.ParentHolder).GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown(); }, resolveTree = true }, new DiaOption("WanderingCaravan.WanderingCaravan_Reject".Translate()) { resolveTree = true } } }; Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, false, $"WanderingCaravan.WanderingCaravan_Title".Translate(infoPawn.LabelCap))); this.SpawnPawns(wanderingCaravans, map, wanderingCaravansSpot); return(true); }
private void DoArrivalAction(Caravan caravan) { bool flag = !mapParent.HasMap; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, null); Pawn t = caravan.PawnsListForReading[0]; TaggedString letterText = null; TaggedString letterCaption = null; LetterDef letterDef = LetterDefOf.NeutralEvent; if (flag) { if (mapParent.Faction == null) { letterCaption = "LetterLabelCaravanEnteredUnownedPOI".Translate(); letterText = "LetterCaravanEnteredUnownedPOI".Translate(caravan.Label).CapitalizeFirst(); letterDef = LetterDefOf.NeutralEvent; } else { letterCaption = "LetterLabelCaravanAttackedPOI".Translate(); letterText = "LetterCaravanAttackedPOI".Translate(caravan.Label).CapitalizeFirst(); letterDef = LetterDefOf.ThreatBig; } } AffectRelationsIfNeeded(ref letterText); Find.LetterStack.ReceiveLetter(letterCaption, letterText, letterDef, t, null, null); Map map = orGenerateMap; bool draftColonists = (mapParent.Faction != null && mapParent.Faction != Faction.OfPlayer); CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists); }
protected override bool TryExecuteWorker(IncidentParms parms) { if (parms.target is Map) { return(IncidentDefOf.TravelerGroup.Worker.TryExecute(parms)); } Caravan caravan = (Caravan)parms.target; Faction faction; if (!this.TryFindFaction(out faction)) { return(false); } CameraJumper.TryJumpAndSelect(caravan); List <Pawn> pawns = this.GenerateCaravanPawns(faction); Caravan metCaravan = CaravanMaker.MakeCaravan(pawns, faction, -1, false); string text = "CaravanMeeting".Translate(caravan.Name, faction.Name, PawnUtility.PawnKindsToCommaList(metCaravan.PawnsListForReading, true)).CapitalizeFirst(); DiaNode diaNode = new DiaNode(text); Pawn bestPlayerNegotiator = BestCaravanPawnUtility.FindBestNegotiator(caravan); if (metCaravan.CanTradeNow) { DiaOption diaOption = new DiaOption("CaravanMeeting_Trade".Translate()); diaOption.action = delegate { Find.WindowStack.Add(new Dialog_Trade(bestPlayerNegotiator, metCaravan, false)); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(metCaravan.Goods.OfType <Pawn>(), "LetterRelatedPawnsTradingWithOtherCaravan".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, false, true); }; if (bestPlayerNegotiator == null) { diaOption.Disable("CaravanMeeting_TradeIncapable".Translate()); } diaNode.options.Add(diaOption); } DiaOption diaOption2 = new DiaOption("CaravanMeeting_Attack".Translate()); diaOption2.action = delegate { LongEventHandler.QueueLongEvent(delegate { Pawn t = caravan.PawnsListForReading[0]; Faction arg_49_0 = faction; Faction ofPlayer = Faction.OfPlayer; FactionRelationKind kind = FactionRelationKind.Hostile; string reason = "GoodwillChangedReason_AttackedCaravan".Translate(); arg_49_0.TrySetRelationKind(ofPlayer, kind, true, reason, new GlobalTargetInfo?(t)); Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(100, 1, 100), WorldObjectDefOf.AttackedNonPlayerCaravan); IntVec3 playerSpot; IntVec3 enemySpot; MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out playerSpot, out enemySpot); CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(playerSpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, true); List <Pawn> list = metCaravan.PawnsListForReading.ToList <Pawn>(); CaravanEnterMapUtility.Enter(metCaravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(enemySpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, false); LordMaker.MakeNewLord(faction, new LordJob_DefendAttackedTraderCaravan(list[0].Position), map, list); Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); CameraJumper.TryJumpAndSelect(t); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, true, true); }, "GeneratingMapForNewEncounter", false, null); }; diaOption2.resolveTree = true; diaNode.options.Add(diaOption2); DiaOption diaOption3 = new DiaOption("CaravanMeeting_MoveOn".Translate()); diaOption3.action = delegate { this.RemoveAllPawnsAndPassToWorld(metCaravan); }; diaOption3.resolveTree = true; diaNode.options.Add(diaOption3); string text2 = "CaravanMeetingTitle".Translate(caravan.Label); WindowStack arg_1F1_0 = Find.WindowStack; DiaNode nodeRoot = diaNode; Faction faction2 = faction; bool delayInteractivity = true; string title = text2; arg_1F1_0.Add(new Dialog_NodeTreeWithFactionInfo(nodeRoot, faction2, delayInteractivity, false, title)); Find.Archive.Add(new ArchivedDialog(diaNode.text, text2, faction)); return(true); }