public override StateGraph CreateGraph() { StateGraph graphArrive = new StateGraph(); var travelGraph = new LordJob_Travel(chillSpot).CreateGraph(); travelGraph.StartingToil = new LordToil_CustomTravel(chillSpot, 0.49f); // CHANGED: override StartingToil LordToil toilArrive = graphArrive.AttachSubgraph(travelGraph).StartingToil; var toilVisit = new LordToil_VisitPoint(chillSpot); // CHANGED graphArrive.lordToils.Add(toilVisit); LordToil toilTakeWounded = new LordToil_TakeWoundedGuest(); graphArrive.lordToils.Add(toilTakeWounded); StateGraph graphExit = new LordJob_TravelAndExit(IntVec3.Invalid).CreateGraph(); LordToil toilExit = graphArrive.AttachSubgraph(graphExit).StartingToil; LordToil toilLeaveMap = graphExit.lordToils[1]; LordToil toilLost = new LordToil_End(); graphExit.AddToil(toilLost); Transition t1 = new Transition(toilArrive, toilVisit); t1.triggers.Add(new Trigger_Memo("TravelArrived")); graphArrive.transitions.Add(t1); LordToil_ExitMapBest toilExitCold = new LordToil_ExitMapBest(); // ADDED TOIL graphArrive.AddToil(toilExitCold); Transition t6 = new Transition(toilArrive, toilExitCold); // ADDED TRANSITION t6.triggers.Add(new Trigger_UrgentlyCold()); t6.preActions.Add(new TransitionAction_Message("MessageVisitorsLeavingCold".Translate(new object[] { faction.Name }))); t6.preActions.Add(new TransitionAction_Custom(() => StopPawns(lord.ownedPawns))); graphArrive.transitions.Add(t6); Transition t2 = new Transition(toilVisit, toilTakeWounded); t2.triggers.Add(new Trigger_WoundedGuestPresent()); t2.preActions.Add(new TransitionAction_Message("MessageVisitorsTakingWounded".Translate(new object[] { faction.def.pawnsPlural.CapitalizeFirst(), faction.Name }))); graphArrive.transitions.Add(t2); Transition t3 = new Transition(toilVisit, toilLeaveMap); t3.triggers.Add(new Trigger_BecameColonyEnemy()); t3.preActions.Add(new TransitionAction_WakeAll()); t3.preActions.Add(new TransitionAction_SetDefendLocalGroup()); graphArrive.transitions.Add(t3); Transition t4 = new Transition(toilArrive, toilExit); t4.triggers.Add(new Trigger_BecameColonyEnemy()); //t4.triggers.Add(new Trigger_VisitorsPleasedMax(MaxPleaseAmount(faction.ColonyGoodwill))); // CHANGED t4.triggers.Add(new Trigger_VisitorsAngeredMax(IncidentWorker_VisitorGroup.MaxAngerAmount(faction.PlayerGoodwill))); // CHANGED t4.preActions.Add(new TransitionAction_WakeAll()); t4.preActions.Add(new TransitionAction_EnsureHaveExitDestination()); graphArrive.transitions.Add(t4); Transition t5 = new Transition(toilVisit, toilExit); t5.triggers.Add(new Trigger_TicksPassed(Rand.Range(16000, 44000))); t5.preActions.Add(new TransitionAction_Message("VisitorsLeaving".Translate(new object[] { faction.Name }))); t5.preActions.Add(new TransitionAction_WakeAll()); t5.preActions.Add(new TransitionAction_EnsureHaveExitDestination()); graphArrive.transitions.Add(t5); return(graphArrive); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.chillSpot).CreateGraph()).StartingToil; stateGraph.StartingToil = startingToil; var lordToil_WanderAndChat = IoM_StoryUtilities.GetWandererChatToil(this.chatType); stateGraph.AddToil(lordToil_WanderAndChat); LordToil_TakeWoundedGuest lordToil_TakeWoundedGuest = new LordToil_TakeWoundedGuest(); stateGraph.AddToil(lordToil_TakeWoundedGuest); StateGraph stateGraph2 = new LordJob_TravelAndExit(IntVec3.Invalid).CreateGraph(); LordToil startingToil2 = stateGraph.AttachSubgraph(stateGraph2).StartingToil; LordToil target = stateGraph2.lordToils[1]; LordToil_ExitMapBest lordToil_ExitMapBest = new LordToil_ExitMapBest(LocomotionUrgency.Walk, true); stateGraph.AddToil(lordToil_ExitMapBest); Transition transition = new Transition(startingToil, lordToil_ExitMapBest); transition.AddSources(new LordToil[] { lordToil_WanderAndChat, lordToil_TakeWoundedGuest }); transition.AddSources(stateGraph2.lordToils); transition.AddTrigger(new Trigger_PawnCannotReachMapEdge()); string leavingMessage; if (this.isLonePawn) { leavingMessage = "MessageLoneWandererLeaving".Translate(new object[] { this.centralPawn.Name }); } else { leavingMessage = "MessageGroupWandererLeaving".Translate(); } transition.AddPreAction(new TransitionAction_Message(leavingMessage)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_ExitMapBest, startingToil2); transition2.AddTrigger(new Trigger_PawnCanReachMapEdge()); transition2.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition2.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(startingToil, lordToil_WanderAndChat); transition3.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_WanderAndChat, lordToil_TakeWoundedGuest); transition4.AddTrigger(new Trigger_WoundedGuestPresent()); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil_WanderAndChat, target); transition5.AddSources(new LordToil[] { lordToil_TakeWoundedGuest, startingToil }); transition5.AddTrigger(new Trigger_PawnLostViolently()); transition5.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.SwitchToHostileFaction(); }))); transition5.AddPreAction(new TransitionAction_WakeAll()); transition5.AddPreAction(new TransitionAction_SetDefendLocalGroup()); transition5.AddPreAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition5); Transition transition6 = new Transition(lordToil_WanderAndChat, startingToil2); transition6.AddTrigger(new Trigger_TicksPassed(Rand.Range(8000, 22000))); transition6.AddPreAction(new TransitionAction_Message(leavingMessage)); transition6.AddPreAction(new TransitionAction_WakeAll()); transition6.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition6); LordToil_AssaultColony lordtoilAssault = new LordToil_AssaultColony(); stateGraph.AddToil(lordtoilAssault); lordtoilAssault.avoidGridMode = AvoidGridMode.Smart; Transition transition7 = new Transition(lordToil_WanderAndChat, lordtoilAssault); transition7.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.factionInt.SetHostileTo(Faction.OfPlayer, true); }))); transition7.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.InquisitorFoundHeretic && IoM_StoryUtilities.InquisitorShouldStartDirectAttack(this.Map, this.centralPawn.GetLord().ownedPawns))); stateGraph.AddTransition(transition7); LordToil_PanicFlee lordToilFlee = new LordToil_PanicFlee(); Transition transition8 = new Transition(lordToil_WanderAndChat, lordToilFlee); transition8.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.factionInt.SetHostileTo(Faction.OfPlayer, true); }))); transition8.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.InquisitorFoundHeretic && !IoM_StoryUtilities.InquisitorShouldStartDirectAttack(this.Map, this.centralPawn.GetLord().ownedPawns))); stateGraph.AddTransition(transition8); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil_wait = new LordToil_DefendPoint(baseCenter, 50f); lordToil_wait.AddFailCondition(() => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead); stateGraph.AddToil(lordToil_wait); LordToil lordToil_leaveInShip = new LordToil_LeaveInShip(); LordToil lordToil_leaveMap = new LordToil_ExitMapBest(LocomotionUrgency.Jog); Transition leaveMapEarly = new Transition(lordToil_leaveInShip, lordToil_leaveMap); leaveMapEarly.AddTrigger(new Trigger_Custom((TriggerSignal x) => ship.Destroyed || !ship.Spawned)); stateGraph.AddTransition(leaveMapEarly); LordToil lordToil_main = new LordToil_ArrestGovernor(); stateGraph.AddToil(lordToil_main); Transition governorDiedWaiting = new Transition(lordToil_wait, lordToil_leaveInShip); governorDiedWaiting.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead)); stateGraph.AddTransition(governorDiedWaiting); Transition transition_fetchingGovernor = new Transition(lordToil_wait, lordToil_main); transition_fetchingGovernor.AddTrigger(new Trigger_TicksPassed(2500)); transition_fetchingGovernor.AddPreAction(new TransitionAction_Message("MessageGovernorIsBeingArrested".Translate(new object[] { CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Name }))); stateGraph.AddTransition(transition_fetchingGovernor); LordToil lordToil_goAggressive = new LordToil_AssaultColony(); lordToil_goAggressive.avoidGridMode = AvoidGridMode.Smart; stateGraph.AddToil(lordToil_goAggressive); Transition transition_useForce = new Transition(lordToil_main, lordToil_goAggressive); transition_useForce.AddTrigger(new Trigger_BecameColonyEnemy()); transition_useForce.AddTrigger(new Trigger_PawnHarmed()); transition_useForce.AddPreAction(new TransitionAction_Message("MessageGovernorArrestGoneHostile".Translate())); transition_useForce.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.lord.ownedPawns[0].Faction.SetHostileTo(Faction.OfPlayer, true); }))); stateGraph.AddTransition(transition_useForce); Transition downedGovernor = new Transition(lordToil_goAggressive, lordToil_main); downedGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Downed)); stateGraph.AddTransition(downedGovernor); Transition killedGovernor = new Transition(lordToil_goAggressive, lordToil_leaveInShip); killedGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead)); stateGraph.AddTransition(killedGovernor); Transition transition_leaveWithGovernor = new Transition(lordToil_main, lordToil_leaveInShip); transition_leaveWithGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.ship.GetInnerContainer().Contains(CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor))); stateGraph.AddToil(lordToil_leaveInShip); stateGraph.AddTransition(transition_leaveWithGovernor); Transition transition_leaveUnderFire = new Transition(lordToil_main, lordToil_leaveInShip); transition_leaveUnderFire.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.lord.ownedPawns[0].Faction.SetHostileTo(Faction.OfPlayer, true); }))); stateGraph.AddToil(lordToil_leaveMap); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition endTransition = new Transition(lordToil_leaveMap, lordToil_End); endTransition.AddTrigger(new Trigger_TicksPassed(60000)); stateGraph.AddTransition(endTransition); return(stateGraph); }