protected override bool TryExecuteWorker(IncidentParms parms) { if (!settings.Active) { return(false); } Map map = (Map)parms.target; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out PawnKindDef animalKind)) { return(false); } if (!FindHomeAreaCell(map, out IntVec3 result)) { return(false); } parms.points = StorytellerUtility.DefaultThreatPointsNow(parms.target); animals = GetAnimals(animalKind, map, parms.points); DropPodUtilityPlus.DropThingsNear(result, map, animals, callback: DriveInsane); SendStandardLetter(parms, null); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { var map = (Map)parms.target; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out var pawnKindDef)) { return(false); } if (!RCellFinder.TryFindRandomPawnEntryCell(out var intVec, map, CellFinder.EdgeRoadChance_Animal)) { return(false); } var list = ManhunterPackIncidentUtility.GenerateAnimals(pawnKindDef, map.Tile, parms.points * 0.2f); var rot = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat); for (var i = 0; i < list.Count; i++) { var deviljho = PawnKindDefOf.Deviljho; var pawn = PawnGenerator.GeneratePawn(deviljho); var loc = CellFinder.RandomClosewalkCellNear(intVec, map, 10); GenSpawn.Spawn(pawn, loc, map, rot); pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 135000); } Find.LetterStack.ReceiveLetter("LetterLabelDeviljho".Translate(), "Deviljholetter".Translate(pawnKindDef.GetLabelPlural()), LetterDefOf.ThreatBig, list[0]); Find.TickManager.slower.SignalForceNormalSpeedShort(); LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical); LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important); return(true); }
protected void CaravanAmbushManhuntersNoTreasure(Caravan caravan) { LongEventHandler.QueueLongEvent(delegate { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); //make sure a minimum point threshold is hit if (incidentParms.points < MinimumPointThreshold) { incidentParms.points = MinimumPointThreshold; } PawnKindDef animalKind; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind)) { Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false); animalKind = ThingDefOfVanilla.Warg; } List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points)); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false); for (int i = 0; i < list.Count; i++) { list[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelIMAmbushLGE".Translate(), "LetterIMAmbushLGE".Translate(), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
protected void TreasureWithManhunters(Caravan caravan) { List <Thing> rewardList = GenerateReward(); for (int i = 0; i < rewardList.Count; i++) { caravan.AddPawnOrItem(rewardList[i], true); } LongEventHandler.QueueLongEvent(delegate { IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan); //make sure a minimum point threshold is hit if (incidentParms.points < MinimumPointThreshold) { incidentParms.points = MinimumPointThreshold + 100f; } PawnKindDef animalKind; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind)) { Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false); animalKind = ThingDefOfVanilla.Warg; } List <Pawn> pawnList = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points)); Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, pawnList, false); for (int i = 0; i < pawnList.Count; i++) { pawnList[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); } Find.TickManager.CurTimeSpeed = TimeSpeed.Paused; GlobalTargetInfo lookTarget = (!pawnList.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(pawnList[0].Position, map, false); Find.LetterStack.ReceiveLetter("LetterLabelTreasureAmbushLGE".Translate(), "LetterTreasureAmbushLGE".Translate(GenThing.GetMarketValue(rewardList).ToStringMoney(null), GenLabel.ThingsLabel(rewardList, string.Empty)), LetterDefOf.ThreatBig, lookTarget, null); }, "GeneratingMapForNewEncounter", false, null); }
public override void Generate(Map map, GenStepParams parms) { float num = this.pointsRange.RandomInRange; List <Pawn> list = new List <Pawn>(); for (int i = 0; i < 50; i++) { PawnKindDef pawnKindDef; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.pointsRange.RandomInRange, map.Tile, out pawnKindDef)) { return; } list.Add(PawnGenerator.GeneratePawn(pawnKindDef, null)); num -= pawnKindDef.combatPower; if (num <= 0f) { break; } } for (int j = 0; j < list.Count; j++) { IntVec3 intVec; if (CellFinderLoose.TryGetRandomCellWith((IntVec3 x) => x.Standable(map) && x.Fogged(map) && GridsUtility.GetRoom(x, map, RegionType.Set_Passable).CellCount >= 4, map, 1000, out intVec)) { IntVec3 intVec2 = CellFinder.RandomSpawnCellForPawnNear(intVec, map, 10); GenSpawn.Spawn(list[j], intVec2, map, Rot4.Random, WipeMode.Vanish, false); list[j].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null); } } }
protected override List <Pawn> GeneratePawns(IncidentParms parms) { PawnKindDef animalKind; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), parms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), -1, out animalKind)) { Log.Error("Could not find any valid animal kind for " + this.def + " incident.", false); return(new List <Pawn>()); } return(ManhunterPackIncidentUtility.GenerateAnimals(animalKind, parms.target.Tile, this.AdjustedPoints(parms.points))); }
protected override bool CanFireNowSub(IncidentParms parms) { if (!base.CanFireNowSub(parms)) { return(false); } Map map = (Map)parms.target; PawnKindDef pawnKindDef; IntVec3 intVec; return(ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out pawnKindDef) && RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)); }
protected override void RunInt() { Slate slate = QuestGen.slate; Map map = QuestGen.slate.Get <Map>("map"); float points = QuestGen.slate.Get("points", 0f); QuestPart_Incident questPart_Incident = new QuestPart_Incident(); questPart_Incident.incident = IncidentDefOf.ManhunterPack; IncidentParms incidentParms = new IncidentParms(); incidentParms.forced = true; incidentParms.target = map; incidentParms.points = points; incidentParms.questTag = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate)); incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid; incidentParms.pawnCount = animalCount.GetValue(slate); if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, map.Tile, out var animalKind)) { incidentParms.pawnKind = animalKind; } slate.Set("animalKindDef", animalKind); int num = ((incidentParms.pawnCount > 0) ? incidentParms.pawnCount : ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, points)); QuestGen.slate.Set("animalCount", num); if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterLabel = x; }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root")); } if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null) { QuestGen.AddTextRequest("root", delegate(string x) { incidentParms.customLetterText = x; }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root")); } questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms); questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal"); QuestGen.quest.AddPart(questPart_Incident); List <Rule> rules = new List <Rule> { new Rule_String("animalKind_label", animalKind.label), new Rule_String("animalKind_labelPlural", animalKind.GetLabelPlural(num)) }; QuestGen.AddQuestDescriptionRules(rules); QuestGen.AddQuestNameRules(rules); }
// Token: 0x0600000D RID: 13 RVA: 0x000021A8 File Offset: 0x000003A8 protected override bool CanFireNowSub(IncidentParms parms) { //Log.Message("base: " + base.CanFireNowSub(parms) + " enabled: " + GrenadesExpendedMod.rabbitincident); if (!base.CanFireNowSub(parms) || !GrenadesExpendedMod.rabbitincident) { return(false); } Map map = (Map)parms.target; PawnKindDef named = DefDatabase <PawnKindDef> .GetNamed("KillerRabbit", true); IntVec3 intVec; return(ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out named) && RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)); }
private void GenerateAnimals(Faction faction, List <Pawn> pawns, Map map, float points) { int numOfAnimals = (int)(pawns.Count * 0.7f); float min = Mathf.Clamp(points * 0.35f, 100, 800); FloatRange pointsRange = new FloatRange(min, Mathf.Clamp(points * 0.6f, min + 100, 2000)); for (int i = 0; i < numOfAnimals; i++) { if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(pointsRange.RandomInRange, map.Tile, out PawnKindDef animalKind)) { PawnGenerationRequest request = new PawnGenerationRequest(animalKind, faction, PawnGenerationContext.NonPlayer); Pawn item = PawnGenerator.GeneratePawn(request); pawns.Add(item); } } }
protected override bool TestRunInt(Slate slate) { if (!Find.Storyteller.difficultyValues.allowViolentQuests) { return(false); } if (!slate.Exists("map")) { return(false); } if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(slate.Get("points", 0f), slate.Get <Map>("map").Tile, out var _)) { return(false); } return(true); }
public override bool ManualDeterminParams() { Map map = (Map)parms.target; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out AnimalType)) { return(false); } if (!RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)) { return(false); } pawnList = ManhunterPackIncidentUtility.GenerateAnimals(AnimalType, map.Tile, parms.points * 1f); AnimalNum = pawnList.Count; lookTargets = new TargetInfo(intVec, map, false); return(true); }
static bool Prefix(ref IncidentParms parms) { Map map = (Map)parms.target; // Set downstream methods to toggle on preferences for avoiding deep water PawnKindDef animalKind = parms.pawnKind; if ((animalKind == null && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out animalKind)) || ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, parms.points) == 0) { return(true); } // Set the animal manually since we need to know ahead of time to determine if it swims parms.pawnKind = animalKind; // Check if the animal involved prefers to swim over walk if (animalKind.race.GetStatValueAbstract(StatDefOf.MoveSpeed) >= animalKind.race.GetStatValueAbstract(StatDef.Named(SwimmingLoader.SwimStat)) + 0.001) { DeepWaterNotPreferredForTryFindRandomPawnEntryCell.PreferNonDeepWater = true; } return(true); }
protected virtual PawnKindDef GetAnimalKind(float points, int tile) { PawnKindDef result = null; if (result == null && def is IncidentDefExpanded) { List <PawnKindDef> pawnKindDefs = (def as IncidentDefExpanded).pawnKinds; if (pawnKindDefs != null && pawnKindDefs.Count > 0) { result = pawnKindDefs.RandomElement(); } } if (result == null) { ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, tile, out result); } return(result); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; PawnKindDef pawnKindDef; if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out pawnKindDef)) { return(false); } IntVec3 intVec; if (!RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)) { return(false); } List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(pawnKindDef, map.Tile, parms.points * 1f); Rot4 rot = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat); for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i]; IntVec3 loc = CellFinder.RandomClosewalkCellNear(intVec, map, 10, null); GenSpawn.Spawn(pawn, loc, map, rot, WipeMode.Vanish, false); pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 120000); } var text = "ManhunterPackArrived".Translate(pawnKindDef.GetLabelPlural(-1)); if (Quote != null) { text += "\n\n"; text += Helper.ReplacePlaceholder(Quote, animal: pawnKindDef.GetLabelPlural(-1)); } Find.LetterStack.ReceiveLetter("LetterLabelManhunterPackArrived".Translate(), text, LetterDefOf.ThreatBig, list[0], null, null); Find.TickManager.slower.SignalForceNormalSpeedShort(); LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical); LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important); return(true); }
protected override bool CanFireNowSub(IncidentParms parms) { PawnKindDef pawnKindDef; return(base.CanFireNowSub(parms) && ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), -1, out pawnKindDef)); }