public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.fallbackLocation).CreateGraph()).StartingToil; LordToil_HuntEnemies lordToil_HuntEnemies = new LordToil_HuntEnemies(this.fallbackLocation); stateGraph.AddToil(lordToil_HuntEnemies); StateGraph stateGraph2 = new LordJob_Travel(IntVec3.Invalid).CreateGraph(); LordToil startingToil2 = stateGraph.AttachSubgraph(stateGraph2).StartingToil; LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.None, false); stateGraph.AddToil(lordToil_ExitMap); LordToil_ExitMap lordToil_ExitMap2 = new LordToil_ExitMap(LocomotionUrgency.Jog, true); stateGraph.AddToil(lordToil_ExitMap2); Transition transition = new Transition(startingToil, startingToil2); transition.AddSource(lordToil_HuntEnemies); transition.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name))); transition.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(startingToil, lordToil_ExitMap2); transition2.AddSource(lordToil_HuntEnemies); transition2.AddSource(lordToil_ExitMap); transition2.AddSources(stateGraph2.lordToils); transition2.AddPreAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name))); transition2.AddTrigger(new Trigger_PawnCannotReachMapEdge()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_ExitMap2, startingToil2); transition3.AddTrigger(new Trigger_PawnCanReachMapEdge()); transition3.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(startingToil, lordToil_HuntEnemies); transition4.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil_HuntEnemies, startingToil2); transition5.AddPreAction(new TransitionAction_Message("MessageFriendlyFightersLeaving".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name))); transition5.AddTrigger(new Trigger_TicksPassed(25000)); transition5.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition5); Transition transition6 = new Transition(startingToil2, lordToil_ExitMap); transition6.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition6); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony); transition2.canMoveToSameState = true; transition2.AddSource(lordToil_AssaultColony); transition2.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyed, HediffGiver_Heat.MemoPawnBurnedByAir)); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandWomb lordToil_DefendAndExpandWomb = new LordToil_DefendAndExpandWomb(); lordToil_DefendAndExpandWomb.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandWomb; LordToil_DefendAndExpandWomb lordToil_DefendAndExpandWomb2 = new LordToil_DefendAndExpandWomb(); lordToil_DefendAndExpandWomb2.distToHiveToAttack = 32f; stateGraph.AddToil(lordToil_DefendAndExpandWomb2); Transition transition = new Transition(lordToil_DefendAndExpandWomb, lordToil_DefendAndExpandWomb2); transition.AddTrigger(new Trigger_PawnHarmed()); transition.AddTrigger(new Trigger_Memo("HiveAttacked")); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandWomb, lordToil_DefendAndExpandWomb2); transition2.canMoveToSameState = true; transition2.AddSource(lordToil_DefendAndExpandWomb2); transition2.AddTrigger(new Trigger_Memo("HiveDestroyed")); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_DefendAndExpandWomb2, lordToil_DefendAndExpandWomb); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarm(500)); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendBase lordToil_DefendBase = (LordToil_DefendBase)(stateGraph.StartingToil = new LordToil_DefendBase(this.baseCenter)); LordToil_DefendBase lordToil_DefendBase2 = new LordToil_DefendBase(this.baseCenter); stateGraph.AddToil(lordToil_DefendBase2); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); lordToil_AssaultColony.avoidGridMode = AvoidGridMode.Smart; stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_BecameColonyAlly()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase); transition2.AddTrigger(new Trigger_BecameColonyEnemy()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_DefendBase, lordToil_AssaultColony); transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f)); transition3.AddTrigger(new Trigger_PawnHarmed(0.4f, false)); transition3.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f)); transition3.AddTrigger(new Trigger_TicksPassed(251999)); transition3.AddTrigger(new Trigger_UrgentlyHungry()); transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f)); transition3.AddPostAction(new TransitionAction_WakeAll()); string message = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(); transition3.AddPreAction(new TransitionAction_Message(message, MessageTypeDefOf.ThreatBig)); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively(); lordToil_DefendHiveAggressively.distToHiveToAttack = 40f; stateGraph.AddToil(lordToil_DefendHiveAggressively); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(false); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony, false, true); Transition transition3 = transition2; float chance = 0.5f; Faction parentFaction = base.Map.ParentFaction; transition3.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony, false, true); Transition transition5 = transition4; chance = 0.5f; parentFaction = base.Map.ParentFaction; transition5.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition4.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition4); Transition transition6 = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true); transition6.canMoveToSameState = true; transition6.AddSource(lordToil_AssaultColony); transition6.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed)); stateGraph.AddTransition(transition6); Transition transition7 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive, false, true); transition7.AddSource(lordToil_DefendHiveAggressively); transition7.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[] { Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyed, HediffGiver_Heat.MemoPawnBurnedByAir })); transition7.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition7); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively(); lordToil_DefendHiveAggressively.distToHiveToAttack = 40f; stateGraph.AddToil(lordToil_DefendHiveAggressively); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, (!aggressive) ? ((LordToil)lordToil_DefendHiveAggressively) : ((LordToil)lordToil_AssaultColony)); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, requireInstigatorWithFaction: true)); transition.AddTrigger(new Trigger_PawnLostViolently(allowRoofCollapse: false)); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyedNonRoofCollapse)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony); Transition transition3 = transition2; float chance = 0.5f; Faction parentFaction = base.Map.ParentFaction; transition3.AddTrigger(new Trigger_PawnHarmed(chance, requireInstigatorWithFaction: false, parentFaction)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony); Transition transition5 = transition4; chance = 0.5f; parentFaction = base.Map.ParentFaction; transition5.AddTrigger(new Trigger_PawnHarmed(chance, requireInstigatorWithFaction: false, parentFaction)); transition4.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition4); Transition transition6 = new Transition(lordToil_DefendAndExpandHive, lordToil_DefendAndExpandHive, canMoveToSameState: true); transition6.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned)); stateGraph.AddTransition(transition6); Transition transition7 = new Transition(lordToil_DefendHiveAggressively, lordToil_DefendHiveAggressively, canMoveToSameState: true); transition7.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned)); stateGraph.AddTransition(transition7); Transition transition8 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive); transition8.AddSource(lordToil_DefendHiveAggressively); transition8.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyedNonRoofCollapse, Hive.MemoDeSpawned, HediffGiver_Heat.MemoPawnBurnedByAir)); transition8.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition8); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Party lordToil_Party = new LordToil_Party(this.spot, 2200); stateGraph.AddToil(lordToil_Party); LordToil_MarriageCeremony lordToil_MarriageCeremony = new LordToil_MarriageCeremony(this.firstPawn, this.secondPawn, this.spot); stateGraph.AddToil(lordToil_MarriageCeremony); LordToil_Party lordToil_Party2 = new LordToil_Party(this.spot, 2200); stateGraph.AddToil(lordToil_Party2); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_Party, lordToil_MarriageCeremony, false, true); transition.AddTrigger(new Trigger_TickCondition(() => this.lord.ticksInToil >= 5000 && this.AreFiancesInPartyArea(), 1)); transition.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyStarts".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, this.firstPawn, null, 1f)); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_MarriageCeremony, lordToil_Party2, false, true); transition2.AddTrigger(new Trigger_TickCondition(() => this.firstPawn.relations.DirectRelationExists(PawnRelationDefOf.Spouse, this.secondPawn), 1)); transition2.AddPreAction(new TransitionAction_Message("MessageNewlyMarried".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, new TargetInfo(this.spot, base.Map, false), null, 1f)); transition2.AddPreAction(new TransitionAction_Custom(delegate { this.AddAttendedWeddingThoughts(); })); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_Party2, lordToil_End, false, true); transition3.AddTrigger(new Trigger_TickCondition(() => this.ShouldAfterPartyBeCalledOff(), 1)); transition3.AddTrigger(new Trigger_PawnKilled()); transition3.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyCalledOff".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, base.Map, false), null, 1f)); stateGraph.AddTransition(transition3, false); this.afterPartyTimeoutTrigger = new Trigger_TicksPassed(7500); Transition transition4 = new Transition(lordToil_Party2, lordToil_End, false, true); transition4.AddTrigger(this.afterPartyTimeoutTrigger); transition4.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyAfterPartyFinished".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, this.firstPawn, null, 1f)); stateGraph.AddTransition(transition4, false); Transition transition5 = new Transition(lordToil_MarriageCeremony, lordToil_End, false, true); transition5.AddSource(lordToil_Party); transition5.AddTrigger(new Trigger_TickCondition(() => this.lord.ticksInToil >= 120000 && (this.firstPawn.Drafted || this.secondPawn.Drafted || !this.firstPawn.Position.InHorDistOf(this.spot, 4f) || !this.secondPawn.Position.InHorDistOf(this.spot, 4f)), 1)); transition5.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyCalledOff".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, base.Map, false), null, 1f)); stateGraph.AddTransition(transition5, false); Transition transition6 = new Transition(lordToil_MarriageCeremony, lordToil_End, false, true); transition6.AddSource(lordToil_Party); transition6.AddTrigger(new Trigger_TickCondition(() => this.ShouldCeremonyBeCalledOff(), 1)); transition6.AddTrigger(new Trigger_PawnKilled()); transition6.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyCalledOff".Translate(this.firstPawn.LabelShort, this.secondPawn.LabelShort, this.firstPawn.Named("PAWN1"), this.secondPawn.Named("PAWN2")), MessageTypeDefOf.NegativeEvent, new TargetInfo(this.spot, base.Map, false), null, 1f)); stateGraph.AddTransition(transition6, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Party lordToil_Party = new LordToil_Party(spot, GatheringDefOf.Party); stateGraph.AddToil(lordToil_Party); LordToil_MarriageCeremony lordToil_MarriageCeremony = new LordToil_MarriageCeremony(firstPawn, secondPawn, spot); stateGraph.AddToil(lordToil_MarriageCeremony); LordToil_Party lordToil_Party2 = new LordToil_Party(spot, GatheringDefOf.Party); stateGraph.AddToil(lordToil_Party2); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_Party, lordToil_MarriageCeremony); transition.AddTrigger(new Trigger_TickCondition(() => lord.ticksInToil >= 5000 && AreFiancesInPartyArea())); transition.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyStarts".Translate(firstPawn.LabelShort, secondPawn.LabelShort, firstPawn.Named("PAWN1"), secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, firstPawn)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_MarriageCeremony, lordToil_Party2); transition2.AddTrigger(new Trigger_TickCondition(() => firstPawn.relations.DirectRelationExists(PawnRelationDefOf.Spouse, secondPawn))); transition2.AddPreAction(new TransitionAction_Message("MessageNewlyMarried".Translate(firstPawn.LabelShort, secondPawn.LabelShort, firstPawn.Named("PAWN1"), secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, new TargetInfo(spot, base.Map))); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { AddAttendedWeddingThoughts(); })); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_Party2, lordToil_End); transition3.AddTrigger(new Trigger_TickCondition(() => ShouldAfterPartyBeCalledOff())); transition3.AddTrigger(new Trigger_PawnKilled()); stateGraph.AddTransition(transition3); afterPartyTimeoutTrigger = new Trigger_TicksPassed(7500); Transition transition4 = new Transition(lordToil_Party2, lordToil_End); transition4.AddTrigger(afterPartyTimeoutTrigger); transition4.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyAfterPartyFinished".Translate(firstPawn.LabelShort, secondPawn.LabelShort, firstPawn.Named("PAWN1"), secondPawn.Named("PAWN2")), MessageTypeDefOf.PositiveEvent, firstPawn)); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil_MarriageCeremony, lordToil_End); transition5.AddSource(lordToil_Party); transition5.AddTrigger(new Trigger_TickCondition(() => lord.ticksInToil >= 120000 && (firstPawn.Drafted || secondPawn.Drafted || !firstPawn.Position.InHorDistOf(spot, 4f) || !secondPawn.Position.InHorDistOf(spot, 4f)))); transition5.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyCalledOff".Translate(firstPawn.LabelShort, secondPawn.LabelShort, firstPawn.Named("PAWN1"), secondPawn.Named("PAWN2")), MessageTypeDefOf.NegativeEvent, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition5); Transition transition6 = new Transition(lordToil_MarriageCeremony, lordToil_End); transition6.AddSource(lordToil_Party); transition6.AddTrigger(new Trigger_TickCondition(() => ShouldCeremonyBeCalledOff())); transition6.AddTrigger(new Trigger_PawnKilled()); transition6.AddPreAction(new TransitionAction_Message("MessageMarriageCeremonyCalledOff".Translate(firstPawn.LabelShort, secondPawn.LabelShort, firstPawn.Named("PAWN1"), secondPawn.Named("PAWN2")), MessageTypeDefOf.NegativeEvent, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition6); return(stateGraph); }
// Token: 0x060007C3 RID: 1987 RVA: 0x00043DC0 File Offset: 0x000421C0 public override StateGraph CreateGraph() { // Log.Message("LordJob_PawnsDefendShip CreateGraph "); StateGraph stateGraph = new StateGraph(); // Log.Message("LordJob_PawnsDefendShip CreateGraph 0"); if (!this.defSpot.IsValid) { Log.Warning("LordJob_PawnsDefendShip defSpot is invalid. Returning graph for LordJob_AssaultColony.", false); stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()); return(stateGraph); } // Log.Message("LordJob_PawnsDefendShip CreateGraph 1"); // Log.Message("defspot "+ this.defSpot+" defradius "+ this.defendRadius); LordToil_DefendPoint lordToil_DefendPoint = new LordToil_DefendPoint(this.defSpot, this.defendRadius); stateGraph.StartingToil = lordToil_DefendPoint; LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(false); stateGraph.AddToil(lordToil_AssaultColony); LordToil_AssaultColony lordToil_AssaultColony2 = new LordToil_AssaultColony(false); stateGraph.AddToil(lordToil_AssaultColony2); Transition transition = new Transition(lordToil_DefendPoint, lordToil_AssaultColony2, false, true); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_PawnCannotReachMapEdge()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony, false, true); transition2.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null)); transition2.AddTrigger(new Trigger_PawnLostViolently(true)); transition2.AddTrigger(new Trigger_Memo(CompSpawnerOnDamaged.MemoDamaged)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendPoint, false, true); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1380, new string[] { CompSpawnerOnDamaged.MemoDamaged })); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony2, false, true); transition4.AddSource(lordToil_AssaultColony); transition4.AddTrigger(new Trigger_ThingDamageTaken(this.shipPart, 0.5f)); transition4.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); stateGraph.AddTransition(transition4, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(siegeSpot).CreateGraph()).StartingToil; LordToil_Siege lordToil_Siege = new LordToil_Siege(siegeSpot, blueprintPoints); stateGraph.AddToil(lordToil_Siege); LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, canDig: false, interruptCurrentJob: true) { useAvoidGrid = true }; stateGraph.AddToil(lordToil_ExitMap); LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_AssaultColony(faction).CreateGraph()).StartingToil; Transition transition = new Transition(startingToil, lordToil_Siege); transition.AddTrigger(new Trigger_Memo("TravelArrived")); transition.AddTrigger(new Trigger_TicksPassed(5000)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_Siege, startingToil2); transition2.AddTrigger(new Trigger_Memo("NoBuilders")); transition2.AddTrigger(new Trigger_Memo("NoArtillery")); transition2.AddTrigger(new Trigger_PawnHarmed(0.08f)); transition2.AddTrigger(new Trigger_FractionPawnsLost(0.3f)); transition2.AddTrigger(new Trigger_TicksPassed((int)(60000f * Rand.Range(1.5f, 3f)))); transition2.AddPreAction(new TransitionAction_Message("MessageSiegersAssaulting".Translate(faction.def.pawnsPlural, faction), MessageTypeDefOf.ThreatBig)); transition2.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_Siege, lordToil_ExitMap); transition3.AddSource(startingToil2); transition3.AddSource(startingToil); transition3.AddTrigger(new Trigger_BecameNonHostileToPlayer()); transition3.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); if (!defSpot.IsValid) { Log.Warning("LordJob_MechanoidsDefendShip defSpot is invalid. Returning graph for LordJob_AssaultColony."); stateGraph.AttachSubgraph(new LordJob_AssaultColony(faction).CreateGraph()); return(stateGraph); } LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)(stateGraph.StartingToil = new LordToil_DefendPoint(defSpot, defendRadius)); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); if (canAssaultColony) { LordToil_AssaultColony lordToil_AssaultColony2 = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony2); Transition transition = new Transition(lordToil_DefendPoint, lordToil_AssaultColony); transition.AddSource(lordToil_AssaultColony2); transition.AddTrigger(new Trigger_PawnCannotReachMapEdge()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony2); transition2.AddTrigger(new Trigger_PawnHarmed(0.5f, requireInstigatorWithFaction: true)); transition2.AddTrigger(new Trigger_PawnLostViolently()); transition2.AddTrigger(new Trigger_Memo(MemoDamaged)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_AssaultColony2, lordToil_DefendPoint); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1380, MemoDamaged)); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony); transition4.AddSource(lordToil_AssaultColony2); transition4.AddTrigger(new Trigger_AnyThingDamageTaken(things, 0.5f)); transition4.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); stateGraph.AddTransition(transition4); } Transition transition5 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony); transition5.AddTrigger(new Trigger_ChanceOnSignal(TriggerSignalType.MechClusterDefeated, 1f)); stateGraph.AddTransition(transition5); if (!isMechCluster) { Transition transition6 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony); transition6.AddTrigger(new Trigger_AnyThingDamageTaken(things, 1f)); stateGraph.AddTransition(transition6); } return(stateGraph); }
// Token: 0x0600079D RID: 1949 RVA: 0x0004323C File Offset: 0x0004163C public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendHiveLoc lordToil_DefendBase = new LordToil_DefendHiveLoc(this.baseCenter); stateGraph.StartingToil = lordToil_DefendBase; LordToil_DefendHiveLoc lordToil_DefendBase2 = new LordToil_DefendHiveLoc(this.baseCenter); stateGraph.AddToil(lordToil_DefendBase2); LordToil_XenomrophAssaultColony lordToil_AssaultColony = new LordToil_XenomrophAssaultColony(true); lordToil_AssaultColony.useAvoidGrid = true; stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2, false, true); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_BecameNonHostileToPlayer()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase, false, true); transition2.AddTrigger(new Trigger_BecamePlayerEnemy()); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_DefendBase, lordToil_AssaultColony, false, true); transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f)); transition3.AddTrigger(new Trigger_PawnHarmed(0.4f, true)); //, null)); // transition3.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f)); // transition3.AddTrigger(new Trigger_TicksPassed(251999)); transition3.AddTrigger(new Trigger_UrgentlyHungry()); transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f)); transition3.AddPostAction(new TransitionAction_WakeAll()); string message = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(); transition3.AddPreAction(new TransitionAction_Message(message, MessageTypeDefOf.ThreatBig, null, 1f)); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(lordToil_AssaultColony, lordToil_DefendBase2, false, true); transition4.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f)); transition4.AddTrigger(new Trigger_TicksPassedWithoutHarm(9000)); transition4.AddPostAction(new TransitionAction_EndAllJobs()); string message2 = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(); transition4.AddPreAction(new TransitionAction_Message(message2, MessageTypeDefOf.NeutralEvent, null, 1f)); stateGraph.AddTransition(transition4, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Stage lordToil_Stage = (LordToil_Stage)(stateGraph.StartingToil = new LordToil_Stage(stageLoc)); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_AssaultColony(faction).CreateGraph()).StartingToil; int tickLimit = Rand.RangeSeeded(5000, 15000, raidSeed); Transition transition = new Transition(lordToil_Stage, startingToil); transition.AddTrigger(new Trigger_TicksPassed(tickLimit)); transition.AddTrigger(new Trigger_FractionPawnsLost(0.3f)); transition.AddPreAction(new TransitionAction_Message("MessageRaidersBeginningAssault".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name), MessageTypeDefOf.ThreatBig, "MessageRaidersBeginningAssault-" + raidSeed)); transition.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition); Transition transition2 = stateGraph.transitions.Find((Transition x) => x.triggers.Any((Trigger y) => y is Trigger_BecameNonHostileToPlayer)); transition2.AddSource(lordToil_Stage); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); if (!this.defSpot.IsValid) { Log.Warning("LordJob_MechanoidsDefendShip defSpot is invalid. Returning graph for LordJob_AssaultColony."); stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()); return(stateGraph); } LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)(stateGraph.StartingToil = new LordToil_DefendPoint(this.defSpot, this.defendRadius)); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); LordToil_AssaultColony lordToil_AssaultColony2 = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony2); Transition transition = new Transition(lordToil_DefendPoint, lordToil_AssaultColony2); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_PawnCannotReachMapEdge()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony); transition2.AddTrigger(new Trigger_PawnHarmed(0.5f, true)); transition2.AddTrigger(new Trigger_PawnLostViolently()); transition2.AddTrigger(new Trigger_Memo(CompSpawnerMechanoidsOnDamaged.MemoDamaged)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendPoint); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1380, CompSpawnerMechanoidsOnDamaged.MemoDamaged)); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_DefendPoint, lordToil_AssaultColony2); transition4.AddSource(lordToil_AssaultColony); transition4.AddTrigger(new Trigger_ThingDamageTaken(this.shipPart, 0.5f)); transition4.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); stateGraph.AddTransition(transition4); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendBase lordToilDefendBase1 = new LordToil_DefendBase(this.baseCenter); stateGraph.StartingToil = lordToilDefendBase1; LordToil_DefendBase lordToilDefendBase2 = new LordToil_DefendBase(this.baseCenter); stateGraph.AddToil(lordToilDefendBase2); LordToil_AssaultColony toilAssaultColony = new LordToil_AssaultColony(true) { useAvoidGrid = true }; stateGraph.AddToil(toilAssaultColony); Transition transition1 = new Transition(lordToilDefendBase1, lordToilDefendBase2); transition1.AddSource(toilAssaultColony); transition1.AddTrigger(new Trigger_BecameNonHostileToPlayer()); stateGraph.AddTransition(transition1); Transition transition3 = new Transition(lordToilDefendBase1, toilAssaultColony); transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f)); transition3.AddTrigger(new Trigger_PawnHarmed(0.4f)); transition3.AddTrigger(new Trigger_ChanceOnTickInterval(2500, 0.03f)); transition3.AddTrigger(new Trigger_TicksPassed(251999)); transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f)); transition3.AddTrigger(new Trigger_OnClamor(ClamorDefOf.Ability)); transition3.AddPostAction(new TransitionAction_WakeAll()); TaggedString taggedString = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(); transition3.AddPreAction(new TransitionAction_Message(taggedString, MessageTypeDefOf.ThreatBig)); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendBase lordToil_DefendBase = (LordToil_DefendBase)(stateGraph.StartingToil = new LordToil_DefendBase(baseCenter)); LordToil_DefendBase lordToil_DefendBase2 = new LordToil_DefendBase(baseCenter); stateGraph.AddToil(lordToil_DefendBase2); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(attackDownedIfStarving: true); lordToil_AssaultColony.useAvoidGrid = true; stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2); transition.AddSource(lordToil_AssaultColony); transition.AddTrigger(new Trigger_BecameNonHostileToPlayer()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase); transition2.AddTrigger(new Trigger_BecamePlayerEnemy()); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { string message = "StartedSermonMessage".Translate(new object[] { this.Preacher.Name, this.MorningPrayerString, this.altar.RoomName }); Messages.Message(message, this.altar, MessageSound.Negative); StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.initialPosition).CreateGraph()).StartingToil; stateGraph.StartingToil = startingToil; LordToil_StartSermom sermonToil = new LordToil_StartSermom(this.Preacher, this.altar); stateGraph.AddToil(sermonToil); Transition startSermonTransition = new Transition(startingToil, sermonToil); startSermonTransition.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(startSermonTransition); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition failedTransition = new Transition(startingToil, lordToil_End); failedTransition.AddSource(sermonToil); failedTransition.AddTrigger(new Trigger_TickCondition(() => this.ShouldBeCalledOff())); failedTransition.AddTrigger(new Trigger_PawnLostViolently()); failedTransition.AddPreAction(new TransitionAction_Message("MessageSermonInterrupted".Translate(), MessageSound.Negative, new TargetInfo(this.altar.Position, base.Map, false))); stateGraph.AddTransition(failedTransition); Transition transition2 = new Transition(sermonToil, lordToil_End); transition2.AddTrigger(new Trigger_TickCondition(() => !this.altar.activeSermon)); transition2.AddPreAction(new TransitionAction_Message("MessageSermonFinished".Translate(), MessageSound.Negative, new TargetInfo(this.altar.Position, base.Map, false))); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { //TODO: This might use some love to expand the Job a bit. Pawn harmed for example. There are some triggers and states that weren't copied. StateGraph stateGraph = new StateGraph(); LordToil_AmbroisaDefenseLGE lordToil_DefendAmbrosia = new LordToil_AmbroisaDefenseLGE(); lordToil_DefendAmbrosia.distToHiveToAttack = 20f; stateGraph.StartingToil = lordToil_DefendAmbrosia; LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAmbrosia, lordToil_AssaultColony); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true)); transition.AddTrigger(new Trigger_PawnLostViolently()); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendAmbrosia, lordToil_AssaultColony); transition2.canMoveToSameState = true; transition2.AddSource(lordToil_AssaultColony); transition2.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned)); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendAmbrosia); transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[] { Hive.MemoAttackedByEnemy, HediffGiver_Heat.MemoPawnBurnedByAir })); transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; LordToil lordToil2 = new LordToil_AssaultColonyArmored(); stateGraph.AddToil(lordToil2); LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, false, true); lordToil_ExitMap.useAvoidGrid = true; stateGraph.AddToil(lordToil_ExitMap); if (assaulterFaction.def.humanlikeFaction) { if (canTimeoutOrFlee) { Transition transition3 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition3.AddSource(lordToil); } //transition3.AddTrigger(new Trigger_TicksPassed(sappers ? SapTimeBeforeGiveUp.RandomInRange : AssaultTimeBeforeGiveUp.RandomInRange)); transition3.AddPreAction(new TransitionAction_Message("MessageRaidersGivenUpLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name), null, 1f)); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition4.AddSource(lordToil); } FloatRange floatRange = new FloatRange(0.25f, 0.35f); float randomInRange = floatRange.RandomInRange; transition4.AddTrigger(new Trigger_FractionColonyDamageTaken(randomInRange, 900f)); transition4.AddPreAction(new TransitionAction_Message("MessageRaidersSatisfiedLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name), null, 1f)); stateGraph.AddTransition(transition4, false); } if (canKidnap) { LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Kidnap().CreateGraph()).StartingToil; Transition transition5 = new Transition(lordToil2, startingToil, false, true); if (lordToil != null) { transition5.AddSource(lordToil); } transition5.AddPreAction(new TransitionAction_Message("MessageRaidersKidnapping".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name), null, 1f)); transition5.AddTrigger(new Trigger_KidnapVictimPresent()); stateGraph.AddTransition(transition5, false); } if (canSteal) { LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_Steal().CreateGraph()).StartingToil; Transition transition6 = new Transition(lordToil2, startingToil2, false, true); if (lordToil != null) { transition6.AddSource(lordToil); } transition6.AddPreAction(new TransitionAction_Message("MessageRaidersStealing".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name), null, 1f)); transition6.AddTrigger(new Trigger_HighValueThingsAround()); stateGraph.AddTransition(transition6, false); } } Transition transition7 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition7.AddSource(lordToil); } transition7.AddTrigger(new Trigger_BecameNonHostileToPlayer()); transition7.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name), null, 1f)); stateGraph.AddTransition(transition7, false); return(stateGraph); }
// Token: 0x0600319A RID: 12698 RVA: 0x00114360 File Offset: 0x00112560 public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive(); lordToil_DefendAndExpandHive.distToHiveToAttack = 10f; stateGraph.StartingToil = lordToil_DefendAndExpandHive; LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively(); lordToil_DefendHiveAggressively.distToHiveToAttack = 40f; stateGraph.AddToil(lordToil_DefendHiveAggressively); LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(false); stateGraph.AddToil(lordToil_AssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHive, this.aggressive ? (LordToil)lordToil_AssaultColony : lordToil_DefendHiveAggressively, false, true); transition.AddTrigger(new Trigger_Memo(Hive.MemoAssaultOnSpawn)); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null)); transition.AddTrigger(new Trigger_PawnLostViolently(false)); transition.AddTrigger(new Trigger_Memo(RimWorld.Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(RimWorld.Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(RimWorld.Hive.MemoDestroyedNonRoofCollapse)); transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyedNonRoofCollapse)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony, false, true); transition2.AddTrigger(new Trigger_PawnHarmed(0.5f, false, base.Map.ParentFaction)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony, false, true); transition3.AddTrigger(new Trigger_PawnHarmed(0.5f, false, base.Map.ParentFaction)); transition3.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(lordToil_DefendAndExpandHive, lordToil_DefendAndExpandHive, true, true); transition4.AddTrigger(new Trigger_Memo(RimWorld.Hive.MemoDeSpawned)); transition4.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned)); stateGraph.AddTransition(transition4, false); Transition transition5 = new Transition(lordToil_DefendHiveAggressively, lordToil_DefendHiveAggressively, true, true); transition5.AddTrigger(new Trigger_Memo(RimWorld.Hive.MemoDeSpawned)); transition5.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned)); stateGraph.AddTransition(transition5, false); Transition transition6 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive, false, true); transition6.AddSource(lordToil_DefendHiveAggressively); transition6.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[] { RimWorld.Hive.MemoAttackedByEnemy, Hive.MemoAttackedByEnemy, RimWorld.Hive.MemoBurnedBadly, Hive.MemoBurnedBadly, RimWorld.Hive.MemoDestroyedNonRoofCollapse, Hive.MemoDestroyedNonRoofCollapse, RimWorld.Hive.MemoDeSpawned, Hive.MemoDeSpawned, HediffGiver_Heat.MemoPawnBurnedByAir })); transition6.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition6, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; if (this.sappers) { lordToil = new LordToil_AssaultColonySappers(); if (this.useAvoidGridSmart) { lordToil.avoidGridMode = AvoidGridMode.Smart; } stateGraph.AddToil(lordToil); Transition transition = new Transition(lordToil, lordToil, true, true); transition.AddTrigger(new Trigger_PawnLost()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil, lordToil, true, false); transition2.AddTrigger(new Trigger_PawnHarmed(1f, false, null)); transition2.AddPostAction(new TransitionAction_CheckForJobOverride()); stateGraph.AddTransition(transition2); } LordToil lordToil2 = new LordToil_AssaultColony(false); if (this.useAvoidGridSmart) { lordToil2.avoidGridMode = AvoidGridMode.Smart; } stateGraph.AddToil(lordToil2); LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, false); lordToil_ExitMap.avoidGridMode = AvoidGridMode.Smart; stateGraph.AddToil(lordToil_ExitMap); if (this.sappers) { Transition transition3 = new Transition(lordToil, lordToil2, false, true); transition3.AddTrigger(new Trigger_NoFightingSappers()); stateGraph.AddTransition(transition3); } if (this.assaulterFaction.def.humanlikeFaction) { if (this.canTimeoutOrFlee) { Transition transition4 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition4.AddSource(lordToil); } transition4.AddTrigger(new Trigger_TicksPassed((!this.sappers) ? LordJob_AssaultColony.AssaultTimeBeforeGiveUp.RandomInRange : LordJob_AssaultColony.SapTimeBeforeGiveUp.RandomInRange)); transition4.AddPreAction(new TransitionAction_Message("MessageRaidersGivenUpLeaving".Translate(new object[] { this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name }), null, 1f)); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition5.AddSource(lordToil); } FloatRange floatRange = new FloatRange(0.25f, 0.35f); float randomInRange = floatRange.RandomInRange; transition5.AddTrigger(new Trigger_FractionColonyDamageTaken(randomInRange, 900f)); transition5.AddPreAction(new TransitionAction_Message("MessageRaidersSatisfiedLeaving".Translate(new object[] { this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name }), null, 1f)); stateGraph.AddTransition(transition5); } if (this.canKidnap) { LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Kidnap().CreateGraph()).StartingToil; Transition transition6 = new Transition(lordToil2, startingToil, false, true); if (lordToil != null) { transition6.AddSource(lordToil); } transition6.AddPreAction(new TransitionAction_Message("MessageRaidersKidnapping".Translate(new object[] { this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name }), null, 1f)); transition6.AddTrigger(new Trigger_KidnapVictimPresent()); stateGraph.AddTransition(transition6); } if (this.canSteal) { LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_Steal().CreateGraph()).StartingToil; Transition transition7 = new Transition(lordToil2, startingToil2, false, true); if (lordToil != null) { transition7.AddSource(lordToil); } transition7.AddPreAction(new TransitionAction_Message("MessageRaidersStealing".Translate(new object[] { this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name }), null, 1f)); transition7.AddTrigger(new Trigger_HighValueThingsAround()); stateGraph.AddTransition(transition7); } } Transition transition8 = new Transition(lordToil2, lordToil_ExitMap, false, true); if (lordToil != null) { transition8.AddSource(lordToil); } transition8.AddTrigger(new Trigger_BecameNonHostileToPlayer()); transition8.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(new object[] { this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name }), null, 1f)); stateGraph.AddTransition(transition8); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); if (!ModLister.RoyaltyInstalled) { Log.ErrorOnce("Bestowing ceremony is a Royalty-specific game system. If you want to use this code please check ModLister.RoyaltyInstalled before calling it. See rules on the Ludeon forum for more info.", 3454535); return(stateGraph); } LordToil_Wait lordToil_Wait = new LordToil_Wait(); stateGraph.AddToil(lordToil_Wait); LordToil_Wait lordToil_Wait2 = new LordToil_Wait(); stateGraph.AddToil(lordToil_Wait2); LordToil_Wait lordToil_Wait3 = new LordToil_Wait(); stateGraph.AddToil(lordToil_Wait3); LordToil_BestowingCeremony_MoveInPlace lordToil_BestowingCeremony_MoveInPlace = new LordToil_BestowingCeremony_MoveInPlace(spotCell, target); stateGraph.AddToil(lordToil_BestowingCeremony_MoveInPlace); LordToil_BestowingCeremony_Wait lordToil_BestowingCeremony_Wait = new LordToil_BestowingCeremony_Wait(target); stateGraph.AddToil(lordToil_BestowingCeremony_Wait); exitToil = ((shuttle == null) ? ((LordToil) new LordToil_ExitMap(LocomotionUrgency.Walk)) : ((LordToil) new LordToil_EnterShuttleOrLeave(shuttle, LocomotionUrgency.Walk, canDig: true, interruptCurrentJob: true))); stateGraph.AddToil(exitToil); Transition transition = new Transition(lordToil_Wait, lordToil_Wait2); transition.AddTrigger(new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && bestower.Spawned)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_Wait2, lordToil_BestowingCeremony_MoveInPlace); transition2.AddTrigger(new Trigger_TicksPassed(600)); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_BestowingCeremony_MoveInPlace, lordToil_BestowingCeremony_Wait); transition3.AddTrigger(new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && bestower.Position == spotCell)); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_BestowingCeremony_Wait, exitToil); transition4.AddTrigger(new Trigger_TicksPassed(30000)); transition4.AddPostAction(new TransitionAction_Custom((Action) delegate { QuestUtility.SendQuestTargetSignals(lord.questTags, "CeremonyExpired", lord.Named("SUBJECT")); })); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil_BestowingCeremony_Wait, lordToil_Wait3); transition5.AddTrigger(new Trigger_Memo("CeremonyFinished")); transition5.AddPostAction(new TransitionAction_Custom((Action) delegate { QuestUtility.SendQuestTargetSignals(lord.questTags, "CeremonyDone", lord.Named("SUBJECT")); })); stateGraph.AddTransition(transition5); Transition transition6 = new Transition(lordToil_Wait3, exitToil); transition6.AddTrigger(new Trigger_TicksPassed(600)); stateGraph.AddTransition(transition6); Transition transition7 = new Transition(lordToil_BestowingCeremony_MoveInPlace, exitToil); transition7.AddSource(lordToil_BestowingCeremony_Wait); transition7.AddTrigger(new Trigger_BecamePlayerEnemy()); stateGraph.AddTransition(transition7); Transition transition8 = new Transition(lordToil_BestowingCeremony_MoveInPlace, exitToil); transition8.AddSource(lordToil_BestowingCeremony_Wait); transition8.AddTrigger(new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && bestower.Spawned && !bestower.CanReach(spotCell, PathEndMode.OnCell, Danger.Deadly))); transition8.AddPostAction(new TransitionAction_Custom((Action) delegate { Messages.Message("MessageBestowingSpotUnreachable".Translate(), bestower, MessageTypeDefOf.NegativeEvent); QuestUtility.SendQuestTargetSignals(lord.questTags, "CeremonyFailed", lord.Named("SUBJECT")); })); stateGraph.AddTransition(transition8); if (!questEndedSignal.NullOrEmpty()) { Transition transition9 = new Transition(lordToil_BestowingCeremony_MoveInPlace, exitToil); transition9.AddSource(lordToil_BestowingCeremony_Wait); transition9.AddSource(lordToil_Wait); transition9.AddSource(lordToil_Wait2); transition9.AddTrigger(new Trigger_Signal(questEndedSignal)); stateGraph.AddTransition(transition9); } return(stateGraph); }
public override StateGraph CreateGraph() { var mainGraph = new StateGraph(); // Use LordJob_Travel as starting toil for this graph: var toil_MoveToSetup = mainGraph.AttachSubgraph(new LordJob_Travel(Info.setupCentre).CreateGraph()).StartingToil; // Next toil is to set up var toil_Setup = new LordToil_SetupCarnival(); mainGraph.AddToil(toil_Setup); var trans_Setup = new Transition(toil_MoveToSetup, toil_Setup); trans_Setup.AddTrigger(new Trigger_Memo("TravelArrived")); mainGraph.AddTransition(trans_Setup); // Meat of the event: entertaining the colony var toil_Entertain = new LordToil_EntertainColony(); mainGraph.AddToil(toil_Entertain); var trans_Entertain = new Transition(toil_Setup, toil_Entertain); trans_Entertain.AddTrigger(new Trigger_Memo("SetupDoneEntertain")); trans_Entertain.AddPostAction(new TransitionAction_Message("CarnEntertainNow".Translate(this.lord.faction))); mainGraph.AddTransition(trans_Entertain); // Rest the carnival between 22:00 and 10:00, or if anyone needs rest var toil_Rest = new LordToil_RestCarnival(); mainGraph.AddToil(toil_Rest); var trans_ToRestFromSetup = new Transition(toil_Setup, toil_Rest); trans_ToRestFromSetup.AddTrigger(new Trigger_Memo("SetupDoneRest")); mainGraph.AddTransition(trans_ToRestFromSetup); var trans_ToRest = new Transition(toil_Entertain, toil_Rest); trans_ToRest.AddTrigger(new Trigger_TickCondition(() => Info.AnyCarnyNeedsRest || !Info.CanEntertainNow)); trans_ToRest.AddPostAction(new TransitionAction_Message("CarnResting".Translate(this.lord.faction))); mainGraph.AddTransition(trans_ToRest); var trans_FromRest = new Transition(toil_Rest, toil_Entertain); trans_FromRest.AddTrigger(new Trigger_TickCondition(() => !Info.AnyCarnyNeedsRest && Info.CanEntertainNow)); trans_FromRest.AddPostAction(new TransitionAction_WakeAll()); trans_FromRest.AddPostAction(new TransitionAction_Message("CarnEntertainNow".Translate(this.lord.faction))); mainGraph.AddTransition(trans_FromRest); // Strike buildings var toil_Strike = new LordToil_StrikeCarnival(); mainGraph.AddToil(toil_Strike); var trans_Strike = new Transition(toil_Rest, toil_Strike); trans_Strike.AddSources(toil_Entertain); trans_Strike.AddTrigger(new Trigger_TicksPassed(this.durationTicks)); trans_Strike.AddPostAction(new TransitionAction_Message("CarnPackingUp".Translate(this.lord.faction))); mainGraph.AddTransition(trans_Strike); // Defend if attacked var toil_Defend = new LordToil_DefendCarnival(); mainGraph.AddToil(toil_Defend); var trans_ToDefend = new Transition(toil_Setup, toil_Defend); trans_ToDefend.AddSources(toil_Entertain, toil_Rest, toil_Strike); trans_ToDefend.AddTrigger(new Trigger_BecameColonyEnemy()); trans_ToDefend.AddTrigger(new Trigger_TickCondition(delegate { if (Find.TickManager.TicksGame % 223 == 0) { var hostiles = Map.attackTargetsCache.TargetsHostileToFaction(lord.faction); foreach (var hostile in hostiles) { if (GenHostility.IsActiveThreat(hostile)) { return(true); } } } return(false); })); trans_ToDefend.AddPreAction(new TransitionAction_WakeAll()); trans_ToDefend.AddPostAction(new TransitionAction_EndAllJobs()); trans_ToDefend.AddPostAction(new TransitionAction_Message("CarnDefending".Translate(this.lord.faction))); mainGraph.AddTransition(trans_ToDefend); var trans_DefendToStrike = new Transition(toil_Defend, toil_Strike); trans_DefendToStrike.AddTrigger(new Trigger_Memo("BattleDonePawnsLost")); trans_DefendToStrike.AddPreAction(new TransitionAction_EndAllJobs()); trans_DefendToStrike.AddPostAction(new TransitionAction_Message("CarnPackingUpHostile".Translate(this.lord.faction))); mainGraph.AddTransition(trans_DefendToStrike); var trans_DefendToRest = new Transition(toil_Defend, toil_Rest); trans_DefendToRest.AddTrigger(new Trigger_Memo("BattleDone")); trans_DefendToRest.AddPreAction(new TransitionAction_EndAllJobs()); trans_DefendToRest.AddPostAction(new TransitionAction_Message("CarnResting".Translate(this.lord.faction))); mainGraph.AddTransition(trans_DefendToRest); // exit map toil var toil_Exit = new LordToil_Leave(); mainGraph.AddToil(toil_Exit); var trans_Exit = new Transition(toil_Strike, toil_Exit); trans_Exit.AddSource(toil_Setup); trans_Exit.AddTrigger(new Trigger_Memo("StrikeDone")); trans_Exit.AddTrigger(new Trigger_Memo("NoBuildings")); trans_Exit.AddPostAction(new TransitionAction_EndAllJobs()); trans_Exit.AddPostAction(new TransitionAction_WakeAll()); mainGraph.AddTransition(trans_Exit); var trans_ExitError = new Transition(toil_MoveToSetup, toil_Exit); trans_ExitError.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(GenDate.TicksPerHour * 8, "TravelArrived")); trans_ExitError.AddPreAction(new TransitionAction_Message("CarnLeavingError".Translate(lord.faction))); trans_ExitError.AddPostAction(new TransitionAction_EndAllJobs()); trans_ExitError.AddPostAction(new TransitionAction_WakeAll()); mainGraph.AddTransition(trans_ExitError); // panic exit map (handled in def?) var trans_ExitPanic = new Transition(toil_Defend, toil_Exit); trans_ExitPanic.AddSources(toil_Strike, toil_Entertain, toil_Rest); trans_ExitPanic.AddTrigger(new Trigger_FractionPawnsLost(0.4f)); trans_ExitPanic.AddTrigger(new Trigger_Memo("LeaderKilled")); trans_ExitPanic.AddPreAction(new TransitionAction_Custom(() => Info.leavingUrgency = LocomotionUrgency.Sprint)); trans_ExitPanic.AddPostAction(new TransitionAction_Message("MessageFightersFleeing".Translate(lord.faction.def.pawnsPlural.CapitalizeFirst(), lord.faction))); mainGraph.AddTransition(trans_ExitPanic); return(mainGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; if (sappers) { lordToil = new LordToil_BurnStealColonySappers(); if (useAvoidGridSmart) { lordToil.useAvoidGrid = true; } stateGraph.AddToil(lordToil); Transition transition = new Transition(lordToil, lordToil, canMoveToSameState: true); transition.AddTrigger(new Trigger_PawnLost()); stateGraph.AddTransition(transition); } LordToil lordToil2 = new LordToil_BurnStealColony(); if (useAvoidGridSmart) { lordToil2.useAvoidGrid = true; } stateGraph.AddToil(lordToil2); LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, canDig: false, interruptCurrentJob: true); lordToil_ExitMap.useAvoidGrid = true; stateGraph.AddToil(lordToil_ExitMap); if (sappers) { Transition transition2 = new Transition(lordToil, lordToil2); transition2.AddTrigger(new Trigger_NoFightingSappers()); stateGraph.AddTransition(transition2); } if (assaulterFaction.def.humanlikeFaction) { if (canTimeoutOrFlee) { Transition transition3 = new Transition(lordToil2, lordToil_ExitMap); if (lordToil != null) { transition3.AddSource(lordToil); } transition3.AddTrigger(new Trigger_TicksPassed(sappers ? SapTimeBeforeGiveUp.RandomInRange : AssaultTimeBeforeGiveUp.RandomInRange)); transition3.AddPreAction(new TransitionAction_Message("MessageRaidersGivenUpLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name))); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil2, lordToil_ExitMap); if (lordToil != null) { transition4.AddSource(lordToil); } float randomInRange = new FloatRange(0.25f, 0.35f).RandomInRange; transition4.AddTrigger(new Trigger_FractionColonyDamageTaken(randomInRange, 900f)); transition4.AddPreAction(new TransitionAction_Message("MessageRaidersSatisfiedLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name))); stateGraph.AddTransition(transition4); } if (canKidnap) { LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Kidnap().CreateGraph()).StartingToil; Transition transition5 = new Transition(lordToil2, startingToil); if (lordToil != null) { transition5.AddSource(lordToil); } transition5.AddPreAction(new TransitionAction_Message("MessageRaidersKidnapping".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name))); transition5.AddTrigger(new Trigger_KidnapVictimPresent()); stateGraph.AddTransition(transition5); } if (canSteal) { LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_Steal().CreateGraph()).StartingToil; Transition transition6 = new Transition(lordToil2, startingToil2); if (lordToil != null) { transition6.AddSource(lordToil); } transition6.AddPreAction(new TransitionAction_Message("MessageRaidersStealing".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name))); transition6.AddTrigger(new Trigger_HighValueThingsAround()); stateGraph.AddTransition(transition6); } } Transition transition7 = new Transition(lordToil2, lordToil_ExitMap); if (lordToil != null) { transition7.AddSource(lordToil); } transition7.AddTrigger(new Trigger_BecameNonHostileToPlayer()); transition7.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(assaulterFaction.def.pawnsPlural.CapitalizeFirst(), assaulterFaction.Name))); stateGraph.AddTransition(transition7); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_PrepareCaravan_GatherAnimals lordToil_PrepareCaravan_GatherAnimals = new LordToil_PrepareCaravan_GatherAnimals(this.meetingPoint); stateGraph.AddToil(lordToil_PrepareCaravan_GatherAnimals); LordToil_PrepareCaravan_Pause lordToil_PrepareCaravan_Pause = new LordToil_PrepareCaravan_Pause(); stateGraph.AddToil(lordToil_PrepareCaravan_Pause); this.gatherItems = new LordToil_PrepareCaravan_GatherItems(this.meetingPoint); stateGraph.AddToil(this.gatherItems); LordToil_PrepareCaravan_Pause lordToil_PrepareCaravan_Pause2 = new LordToil_PrepareCaravan_Pause(); stateGraph.AddToil(lordToil_PrepareCaravan_Pause2); LordToil_PrepareCaravan_GatherSlaves lordToil_PrepareCaravan_GatherSlaves = new LordToil_PrepareCaravan_GatherSlaves(this.meetingPoint); stateGraph.AddToil(lordToil_PrepareCaravan_GatherSlaves); LordToil_PrepareCaravan_Pause lordToil_PrepareCaravan_Pause3 = new LordToil_PrepareCaravan_Pause(); stateGraph.AddToil(lordToil_PrepareCaravan_Pause3); LordToil_PrepareCaravan_Wait lordToil_PrepareCaravan_Wait = new LordToil_PrepareCaravan_Wait(this.meetingPoint); stateGraph.AddToil(lordToil_PrepareCaravan_Wait); LordToil_PrepareCaravan_Pause lordToil_PrepareCaravan_Pause4 = new LordToil_PrepareCaravan_Pause(); stateGraph.AddToil(lordToil_PrepareCaravan_Pause4); LordToil_PrepareCaravan_Leave lordToil_PrepareCaravan_Leave = new LordToil_PrepareCaravan_Leave(this.exitSpot); stateGraph.AddToil(lordToil_PrepareCaravan_Leave); LordToil_PrepareCaravan_Pause lordToil_PrepareCaravan_Pause5 = new LordToil_PrepareCaravan_Pause(); stateGraph.AddToil(lordToil_PrepareCaravan_Pause5); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(lordToil_PrepareCaravan_GatherAnimals, lordToil_End); transition.AddSource(this.gatherItems); transition.AddSource(lordToil_PrepareCaravan_GatherSlaves); transition.AddSource(lordToil_PrepareCaravan_Wait); transition.AddSource(lordToil_PrepareCaravan_Leave); transition.AddSource(lordToil_PrepareCaravan_Pause); transition.AddSource(lordToil_PrepareCaravan_Pause2); transition.AddSource(lordToil_PrepareCaravan_Pause3); transition.AddSource(lordToil_PrepareCaravan_Pause4); transition.AddSource(lordToil_PrepareCaravan_Pause5); transition.AddTrigger(new Trigger_Custom((TriggerSignal x) => x.type == TriggerSignalType.PawnLost && !this.caravanSent)); transition.AddPreAction(new TransitionAction_Message("MessageFailedToSendCaravanBecausePawnLost".Translate(), MessageTypeDefOf.NegativeEvent)); transition.AddPostAction(new TransitionAction_Custom(delegate { CaravanFormingUtility.Notify_FormAndSendCaravanLordFailed(this.lord); })); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_PrepareCaravan_GatherAnimals, this.gatherItems); transition2.AddTrigger(new Trigger_Memo("AllAnimalsGathered")); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(this.gatherItems, lordToil_PrepareCaravan_GatherSlaves); transition3.AddTrigger(new Trigger_Memo("AllItemsGathered")); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_PrepareCaravan_GatherSlaves, lordToil_PrepareCaravan_Wait); transition4.AddTrigger(new Trigger_Memo("AllSlavesGathered")); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil_PrepareCaravan_Wait, lordToil_PrepareCaravan_Leave); transition5.AddTrigger(new Trigger_NoPawnsVeryTiredAndSleeping(0f)); transition5.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition5); Transition transition6 = new Transition(lordToil_PrepareCaravan_Leave, lordToil_End); transition6.AddTrigger(new Trigger_Memo("ReadyToExitMap")); transition6.AddPreAction(new TransitionAction_Custom(new Action(this.SendCaravan))); stateGraph.AddTransition(transition6); Transition transition7 = this.PauseTransition(lordToil_PrepareCaravan_GatherAnimals, lordToil_PrepareCaravan_Pause); stateGraph.AddTransition(transition7); Transition transition8 = this.UnpauseTransition(lordToil_PrepareCaravan_Pause, lordToil_PrepareCaravan_GatherAnimals); stateGraph.AddTransition(transition8); Transition transition9 = this.PauseTransition(this.gatherItems, lordToil_PrepareCaravan_Pause2); stateGraph.AddTransition(transition9); Transition transition10 = this.UnpauseTransition(lordToil_PrepareCaravan_Pause2, this.gatherItems); stateGraph.AddTransition(transition10); Transition transition11 = this.PauseTransition(lordToil_PrepareCaravan_GatherSlaves, lordToil_PrepareCaravan_Pause3); stateGraph.AddTransition(transition11); Transition transition12 = this.UnpauseTransition(lordToil_PrepareCaravan_Pause3, lordToil_PrepareCaravan_GatherSlaves); stateGraph.AddTransition(transition12); Transition transition13 = this.PauseTransition(lordToil_PrepareCaravan_Leave, lordToil_PrepareCaravan_Pause5); stateGraph.AddTransition(transition13); Transition transition14 = this.UnpauseTransition(lordToil_PrepareCaravan_Pause5, lordToil_PrepareCaravan_Leave); stateGraph.AddTransition(transition14); Transition transition15 = this.PauseTransition(lordToil_PrepareCaravan_Wait, lordToil_PrepareCaravan_Pause4); stateGraph.AddTransition(transition15); Transition transition16 = this.UnpauseTransition(lordToil_PrepareCaravan_Pause4, lordToil_PrepareCaravan_Wait); stateGraph.AddTransition(transition16); return(stateGraph); }
public override StateGraph CreateGraph() { List <Pawn> lordPawns = this.lord.ownedPawns; StateGraph stateGraph = new StateGraph(); IntVec3 retrieversPosition = default(IntVec3); stateGraph.StartingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.targetCaravan.Position).CreateGraph()).StartingToil; LordToil_DefendPoint defendPointLordToil = new LordToil_DefendPoint(); stateGraph.AddToil(defendPointLordToil); LordToil_ExitMap exitMapLordToil = new LordToil_ExitMap(); stateGraph.AddToil(exitMapLordToil); LordToil_ExitMap exitMapOnConditionLordToil = new LordToil_ExitMap(); stateGraph.AddToil(exitMapOnConditionLordToil); stateGraph.AddTransition(new Transition(stateGraph.StartingToil, defendPointLordToil) { triggers = { new Trigger_Memo("TravelArrived") }, postActions = { new TransitionAction_Custom(new Action(delegate { if (this.targetCaravan == null || this.targetCaravan.Faction == Faction.OfPlayer) { this.TargetCaravnLost(); this.lord.ReceiveMemo("TargetCaravanGone"); return; } this.targetCaravan.pather.StartPath(retrieversPosition = lordPawns.First().Position, PathEndMode.ClosestTouch); this.lord.AddPawn(this.targetCaravan); })) } }); Transition exitMapTransition = new Transition(defendPointLordToil, exitMapLordToil) { triggers = { new Trigger_Memo("TargetCaravanGone"), new Trigger_Custom(t => t.type == TriggerSignalType.Tick && lordPawns.Contains(this.targetCaravan)) } }; exitMapTransition.AddSource(stateGraph.StartingToil); stateGraph.AddTransition(exitMapTransition); stateGraph.AddTransition(new Transition(exitMapLordToil, exitMapOnConditionLordToil) { triggers = { new Trigger_PawnLost() }, preActions = { new TransitionAction_Custom(new Action(delegate { if (!lordPawns.Contains(this.targetCaravan)) { this.TargetCaravnLost(); } })) } }); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); string noFulfilledTradeMsg = "IR.LordJobFulfillItemRequest.NoFulfillTrade".Translate(); string partiallyFulfilledTradeMsg = "IR.LordJobFulfillItemRequest.NoFulfillAllTrade".Translate(); string addedMessageText = faction.RelationKindWith(playerFaction) == FactionRelationKind.Neutral ? "IR.LordJobFulfillItemRequest.AttackingOutOfAnger".Translate() : "IR.LordJobFulfillItemRequest.RelationsDropped".Translate(); TransitionAction_Custom clearCaravanRequest = new TransitionAction_Custom(() => { Find.World.GetComponent <RequestSession>().CloseOpenDealWith(faction); }); // =================== // TOILS // =================== LordToil_Travel moving = new LordToil_Travel(chillSpot); stateGraph.StartingToil = moving; LordToil_DefendPoint defending = new LordToil_DefendTraderCaravan(); stateGraph.AddToil(defending); LordToil_DefendPoint defendingChillPoint = new LordToil_DefendTraderCaravan(chillSpot, 40); stateGraph.AddToil(defendingChillPoint); LordToil_ExitMapAndEscortCarriers exitingAndEscorting = new LordToil_ExitMapAndEscortCarriers(); stateGraph.AddToil(exitingAndEscorting); LordToil_ExitMap exiting = new LordToil_ExitMap(); stateGraph.AddToil(exiting); LordToil_ExitMap urgentExiting = new LordToil_ExitMap(LocomotionUrgency.Walk, true); stateGraph.AddToil(urgentExiting); LordToil_ExitMapTraderFighting exitWhileFighting = new LordToil_ExitMapTraderFighting(); stateGraph.AddToil(exitWhileFighting); // =================== // TRANSITIONS // =================== Transition leaveIfDangerousTemp = new Transition(moving, exitingAndEscorting); leaveIfDangerousTemp.AddSources(new LordToil[] { defending, defendingChillPoint }); leaveIfDangerousTemp.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures()); leaveIfDangerousTemp.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); leaveIfDangerousTemp.AddPostAction(new TransitionAction_EndAllJobs()); leaveIfDangerousTemp.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(leaveIfDangerousTemp); Transition leaveIfTrapped = new Transition(moving, urgentExiting); leaveIfTrapped.AddSources(new LordToil[] { defending, defendingChillPoint, exitingAndEscorting, exiting, exitWhileFighting }); leaveIfTrapped.AddTrigger(new Trigger_PawnCannotReachMapEdge()); leaveIfTrapped.AddPostAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); leaveIfTrapped.AddPostAction(new TransitionAction_WakeAll()); leaveIfTrapped.AddPostAction(new TransitionAction_EndAllJobs()); leaveIfTrapped.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(leaveIfTrapped); Transition fightIfTrapped = new Transition(urgentExiting, exitWhileFighting); fightIfTrapped.AddTrigger(new Trigger_PawnCanReachMapEdge()); fightIfTrapped.AddPostAction(new TransitionAction_EndAllJobs()); fightIfTrapped.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(fightIfTrapped); Transition fightIfFractionPawnsLost = new Transition(moving, exitWhileFighting); fightIfFractionPawnsLost.AddSources(new LordToil[] { defending, defendingChillPoint, exitingAndEscorting, exiting }); fightIfFractionPawnsLost.AddTrigger(new Trigger_FractionPawnsLost(0.2f)); fightIfFractionPawnsLost.AddPostAction(new TransitionAction_EndAllJobs()); fightIfFractionPawnsLost.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(fightIfFractionPawnsLost); Transition defendIfPawnHarmed = new Transition(moving, defending); defendIfPawnHarmed.AddTrigger(new Trigger_PawnHarmed()); defendIfPawnHarmed.AddPreAction(new TransitionAction_SetDefendTrader()); defendIfPawnHarmed.AddPostAction(new TransitionAction_WakeAll()); defendIfPawnHarmed.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(defendIfPawnHarmed); Transition returnToNormalAfterTimePasses = new Transition(defending, moving); returnToNormalAfterTimePasses.AddTrigger(new Trigger_TicksPassedWithoutHarm(1200)); stateGraph.AddTransition(returnToNormalAfterTimePasses); Transition stayPutAtSpot = new Transition(moving, defendingChillPoint); stayPutAtSpot.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(stayPutAtSpot); Transition leaveIfRequestFulfilled = new Transition(moving, exitingAndEscorting); leaveIfRequestFulfilled.AddSources(new LordToil[] { defending, defendingChillPoint, }); leaveIfRequestFulfilled.AddTrigger(new Trigger_Memo(MemoOnFulfilled)); leaveIfRequestFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.RequestedCaravanLeaving".Translate(faction.Name))); leaveIfRequestFulfilled.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(leaveIfRequestFulfilled); int ticksUntilBadThings = Rand.Range( Mathf.RoundToInt(CaravanManager.fullDayInTicks / 2), // 0.5 days CaravanManager.fullDayInTicks + Mathf.RoundToInt(CaravanManager.fullDayInTicks / 4)); // 1.25 days // Determine actions if request goes unfulfilled based on faction relation Trigger_TicksPassed ticksPassed = new Trigger_TicksPassed(ticksUntilBadThings); TransitionAction_Message actionMessage = new TransitionAction_Message("IR.LordJobFulfillItemRequest.FactionInsulted".Translate(faction.Name) + "\n" + addedMessageText); TransitionAction_Message leavingMessage = new TransitionAction_Message("IR.LordJobFulfillItemRequest.RequestedCaravanLeaving".Translate(faction.Name)); if (isFactionNeutral) { Action setFactionToHostile = () => faction.TrySetRelationKind(playerFaction, FactionRelationKind.Hostile, true, noFulfilledTradeMsg); Transition attackIfNotEnoughSilver = new Transition(moving, defending, true); attackIfNotEnoughSilver.AddSources(new LordToil[] { defending, defendingChillPoint, exiting, exitingAndEscorting }); attackIfNotEnoughSilver.AddTrigger(new Trigger_Memo(MemoOnUnfulfilled)); attackIfNotEnoughSilver.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.TradersAttacking".Translate(faction.Name))); attackIfNotEnoughSilver.AddPreAction(new TransitionAction_Custom(setFactionToHostile)); attackIfNotEnoughSilver.AddPostAction(new TransitionAction_WakeAll()); attackIfNotEnoughSilver.AddPostAction(new TransitionAction_SetDefendLocalGroup()); stateGraph.AddTransition(attackIfNotEnoughSilver, true); Transition attackIfRequestUnfulfilled = new Transition(defendingChillPoint, defending); attackIfRequestUnfulfilled.AddTrigger(ticksPassed); attackIfRequestUnfulfilled.AddPreAction(actionMessage); attackIfRequestUnfulfilled.AddPreAction(new TransitionAction_Custom(setFactionToHostile)); attackIfRequestUnfulfilled.AddPostAction(new TransitionAction_WakeAll()); attackIfRequestUnfulfilled.AddPostAction(new TransitionAction_SetDefendLocalGroup()); stateGraph.AddTransition(attackIfRequestUnfulfilled, true); Transition leaveAfterAttacking = new Transition(defendingChillPoint, exitingAndEscorting); leaveAfterAttacking.AddSource(defending); leaveAfterAttacking.AddTrigger(new Trigger_TicksPassed(ticksUntilBadThings + 10000)); leaveAfterAttacking.AddPreAction(leavingMessage); leaveAfterAttacking.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(leaveAfterAttacking); } else { Transition leaveIfRequestUnfulfilled = new Transition(moving, exitingAndEscorting); leaveIfRequestUnfulfilled.AddSources(new LordToil[] { defending, defendingChillPoint }); leaveIfRequestUnfulfilled.AddTrigger(new Trigger_Memo(MemoOnUnfulfilled)); leaveIfRequestUnfulfilled.AddTrigger(ticksPassed); leaveIfRequestUnfulfilled.AddPreAction(actionMessage); leaveIfRequestUnfulfilled.AddPreAction(new TransitionAction_Custom(() => { faction.TryAffectGoodwillWith(playerFaction, -30, true, false, noFulfilledTradeMsg); })); leaveIfRequestUnfulfilled.AddPostAction(leavingMessage); leaveIfRequestUnfulfilled.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(leaveIfRequestUnfulfilled); } // Partial fulfillment Transition leaveIfRequestMostlyFulfilled = new Transition(moving, exiting); leaveIfRequestMostlyFulfilled.AddSources(new LordToil[] { defending, defendingChillPoint }); leaveIfRequestMostlyFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_S)); leaveIfRequestMostlyFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.DisappointedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput)); leaveIfRequestMostlyFulfilled.AddPreAction(new TransitionAction_Custom(() => { faction.TryAffectGoodwillWith(playerFaction, -5, true, false, partiallyFulfilledTradeMsg); })); leaveIfRequestMostlyFulfilled.AddPostAction(leavingMessage); leaveIfRequestMostlyFulfilled.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(leaveIfRequestMostlyFulfilled); Transition leaveIfRequestSomewhatFulfilled = new Transition(moving, exiting); leaveIfRequestSomewhatFulfilled.AddSources(new LordToil[] { defending, defendingChillPoint }); leaveIfRequestSomewhatFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_M)); leaveIfRequestSomewhatFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.AnnoyedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput)); leaveIfRequestSomewhatFulfilled.AddPreAction(new TransitionAction_Custom(() => { faction.TryAffectGoodwillWith(playerFaction, -10, true, false, partiallyFulfilledTradeMsg); })); leaveIfRequestSomewhatFulfilled.AddPostAction(leavingMessage); leaveIfRequestSomewhatFulfilled.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(leaveIfRequestSomewhatFulfilled); Transition leaveIfRequestHardlyFulfilled = new Transition(moving, exiting); leaveIfRequestHardlyFulfilled.AddSources(new LordToil[] { defending, defendingChillPoint }); leaveIfRequestHardlyFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_L)); leaveIfRequestHardlyFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.OutragedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput)); leaveIfRequestHardlyFulfilled.AddPreAction(new TransitionAction_Custom(() => { faction.TryAffectGoodwillWith(playerFaction, -20, true, false, partiallyFulfilledTradeMsg); })); leaveIfRequestHardlyFulfilled.AddPostAction(leavingMessage); leaveIfRequestHardlyFulfilled.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(leaveIfRequestHardlyFulfilled); Transition continueToLeaveMap = new Transition(exitingAndEscorting, exitingAndEscorting, true); continueToLeaveMap.AddTrigger(new Trigger_PawnLost()); continueToLeaveMap.AddTrigger(new Trigger_TickCondition(() => LordToil_ExitMapAndEscortCarriers.IsAnyDefendingPosition(lord.ownedPawns) && !GenHostility.AnyHostileActiveThreatTo(Map, faction), 60)); continueToLeaveMap.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(continueToLeaveMap); Transition finishLeavingMap = new Transition(exitingAndEscorting, exiting); finishLeavingMap.AddTrigger(new Trigger_TicksPassed(60000)); finishLeavingMap.AddPostAction(new TransitionAction_WakeAll()); finishLeavingMap.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(finishLeavingMap); Transition leaveIfBadThingsHappen = new Transition(defendingChillPoint, exitingAndEscorting); leaveIfBadThingsHappen.AddSources(new LordToil[] { moving, defending }); leaveIfBadThingsHappen.AddTrigger(new Trigger_ImportantTraderCaravanPeopleLost()); leaveIfBadThingsHappen.AddPostAction(new TransitionAction_WakeAll()); leaveIfBadThingsHappen.AddPostAction(new TransitionAction_EndAllJobs()); leaveIfBadThingsHappen.AddPostAction(clearCaravanRequest); stateGraph.AddTransition(leaveIfBadThingsHappen); return(stateGraph); }
// Token: 0x06000795 RID: 1941 RVA: 0x00042F44 File Offset: 0x00041344 public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendAndExpandHiveLike lordToil_DefendAndExpandHiveLike = new LordToil_DefendAndExpandHiveLike { distToHiveToAttack = radius, }; stateGraph.StartingToil = lordToil_DefendAndExpandHiveLike; LordToil_DefendHiveLikeAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveLikeAggressively { distToHiveToAttack = radius }; stateGraph.AddToil(lordToil_DefendHiveAggressively); LordToil_XenomrophAssaultColony lordToil_XenomrophAssaultColony = new LordToil_XenomrophAssaultColony(false); stateGraph.AddToil(lordToil_XenomrophAssaultColony); Transition transition = new Transition(lordToil_DefendAndExpandHiveLike, (!aggressive) ? (LordToil)lordToil_DefendHiveAggressively : (LordToil)lordToil_XenomrophAssaultColony, false, true); transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null)); transition.AddTrigger(new Trigger_PawnLostViolently(false)); transition.AddTrigger(new Trigger_Memo(HiveLike.MemoAttackedByEnemy)); transition.AddTrigger(new Trigger_Memo(HiveLike.MemoBurnedBadly)); transition.AddTrigger(new Trigger_Memo(HiveLike.MemoDestroyedNonRoofCollapse)); transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir)); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_DefendAndExpandHiveLike, lordToil_XenomrophAssaultColony, false, true); Transition transition3 = transition2; float chance = 0.05f; Faction parentFaction = base.Map.ParentFaction; transition3.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2, false); Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_XenomrophAssaultColony, false, true); Transition transition5 = transition4; chance = 0.5f; parentFaction = base.Map.ParentFaction; transition5.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction)); transition4.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition4, false); Transition transition6 = new Transition(lordToil_DefendAndExpandHiveLike, lordToil_DefendAndExpandHiveLike, true, true); transition6.AddTrigger(new Trigger_Memo(HiveLike.MemoDeSpawned)); stateGraph.AddTransition(transition6, false); Transition transition7 = new Transition(lordToil_DefendHiveAggressively, lordToil_DefendHiveAggressively, true, true); transition7.AddTrigger(new Trigger_Memo(HiveLike.MemoDeSpawned)); stateGraph.AddTransition(transition7, false); Transition transition8 = new Transition(lordToil_XenomrophAssaultColony, lordToil_DefendAndExpandHiveLike, false, true); transition8.AddSource(lordToil_DefendHiveAggressively); transition8.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[] { HiveLike.MemoAttackedByEnemy, HiveLike.MemoBurnedBadly, HiveLike.MemoDestroyedNonRoofCollapse, HiveLike.MemoDeSpawned, HediffGiver_Heat.MemoPawnBurnedByAir })); transition8.AddPostAction(new TransitionAction_EndAttackBuildingJobs()); stateGraph.AddTransition(transition8, false); return(stateGraph); }