protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; PawnKindDef largeMonster = WyvernUtility.GetRandomLargeMonsterForEvent(map); if (largeMonster == null) { return(false); } IntVec3 intVec; if (!RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)) { return(false); } IntVec3 loc = CellFinder.RandomClosewalkCellNear(intVec, map, 10, null); Pawn newThing = PawnGenerator.GeneratePawn(largeMonster, null); PawnKindDef smallMonsterGroup = WyvernUtility.GetSmallMonsterGroupForLargeMonster(largeMonster); // is leader of pack if not null if (smallMonsterGroup != null) { newThing.gender = Gender.Male; // pack leader are always male } Pawn newLargeMonster = (Pawn)GenSpawn.Spawn(newThing, loc, map, WipeMode.Vanish); newLargeMonster.needs.food.CurLevelPercentage = 1f; if (smallMonsterGroup == null) { Find.LetterStack.ReceiveLetter("LetterLabelLargeMonsterAppear".Translate(), "LetterTextLargeMonsterAppear".Translate(newLargeMonster.Label.CapitalizeFirst()), LetterDefOf.ThreatSmall, new TargetInfo(intVec, map, false), null, null); return(true); } int freeColonistsCount = map.mapPawns.FreeColonistsCount; float randomInRange = IncidentWorker_LargeMonsterAppear.CountPerColonistRange.RandomInRange; float f = (float)freeColonistsCount * randomInRange; int num = Mathf.Clamp(GenMath.RoundRandom(f), 1, 10); for (int i = 0; i < num; i++) { Pawn newThing2 = PawnGenerator.GeneratePawn(smallMonsterGroup, null); Pawn newSmallMonster = (Pawn)GenSpawn.Spawn(newThing2, loc, map, WipeMode.Vanish); newSmallMonster.needs.food.CurLevelPercentage = 1f; } Find.LetterStack.ReceiveLetter("LetterLabelLargeMonsterAppear".Translate(), "LetterTextLargeMonsterAppearWithGroup".Translate(newLargeMonster.Label.CapitalizeFirst(), smallMonsterGroup.label.CapitalizeFirst()), LetterDefOf.ThreatSmall, new TargetInfo(intVec, map, false), null, null); return(true); }
protected override bool CanFireNowSub(IncidentParms parms) { if (!base.CanFireNowSub(parms)) { return(false); } Map map = (Map)parms.target; if (WyvernUtility.GetRandomLargeMonsterForEvent(map) == null) { return(false); } IntVec3 intVec; return(RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null)); }