public override void Tick() { base.Tick(); if (this.count++ > 1) { this.count = 0; List <Lord> lords = base.Map.lordManager.lords; IntVec3 position = base.Position; checked { for (int i = 0; i < lords.Count; i++) { Lord lord = lords[i]; if (lord.LordJob is LordJob_TradeWithColony) { FieldInfo field = lord.LordJob.GetType().GetField("chillSpot", BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); IntVec3 intVec = (IntVec3)field.GetValue(lord.LordJob); if (intVec.x != position.x || intVec.y != position.y || intVec.z != position.z) { field.SetValue(lord.LordJob, position); } LordToil curLordToil = lord.CurLordToil; if (curLordToil is LordToil_Travel) { LordToil_Travel lordToil_Travel = (LordToil_Travel)curLordToil; if (lordToil_Travel.FlagLoc != position) { lordToil_Travel.SetDestination(position); lordToil_Travel.UpdateAllDuties(); } } else if (curLordToil is LordToil_DefendPoint) { LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)curLordToil; if (lordToil_DefendPoint.FlagLoc != position) { lordToil_DefendPoint.SetDefendPoint(position); lordToil_DefendPoint.UpdateAllDuties(); } } foreach (Pawn current in lord.ownedPawns) { if (current.RaceProps.Animal) { if (current.needs != null && current.needs.food != null && current.needs.food.CurLevel <= current.needs.food.MaxLevel) { current.needs.food.CurLevel = current.needs.food.MaxLevel; } } } } } } } }
// 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(); 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); }
static bool Prefix(LordToil_DefendPoint __instance) { LordToilData_DefendPoint data = Traverse.Create(__instance).Field("data").GetValue <LordToilData_DefendPoint>(); for (int i = 0; i < __instance.lord.ownedPawns.Count; i++) { Pawn pawn = __instance.lord.ownedPawns[i]; pawn.mindState.duty = new PawnDuty(DutyDefOf.Defend, data.defendPoint, -1f); pawn.mindState.duty.focusSecond = data.defendPoint; if (pawn.RaceProps.Animal) { Log.Message("setting radius to 1 for animal"); pawn.mindState.duty.radius = 1f; } } return(false); }
/// <summary> /// Initializes some variables after loading is complete or when the deployment is first started /// </summary> private void Init() { deployedMilitaryCommandMenu = new DeployedMilitaryCommandMenu(); if (!Find.WindowStack.IsOpen(typeof(DeployedMilitaryCommandMenu))) { Find.WindowStack.Add(deployedMilitaryCommandMenu); } else { deployedMilitaryCommandMenu = (DeployedMilitaryCommandMenu)Find.WindowStack.Windows.First(window => window.GetType() == typeof(DeployedMilitaryCommandMenu)); } deployedMilitaryCommandMenu.squadMilitaryOrderDic.SetOrAdd(squad, currentOrder); deployedMilitaryCommandMenu.currentOrderPositionDic[squad] = currentOrderPosition; lordToil_DefendPoint = new LordToil_DefendPoint(currentOrderPosition); lordToil_HuntEnemies = new LordToil_HuntEnemies(currentOrderPosition); }
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 void ChangeDefendPoint(Faction faction) { Lord defendLord = null; List <Lord> allLords = this.SingleMap.lordManager.lords; for (int i = 0; i < allLords.Count; i++) { Lord lord = allLords[i]; if (lord.faction != null && lord.faction == faction) { if (lord.CurLordToil != null && lord.CurLordToil is LordToil_DefendPoint) { defendLord = lord; LordToil_DefendPoint lordToil = defendLord.CurLordToil as LordToil_DefendPoint; lordToil.SetDefendPoint(this.centerLocation.ToIntVec3); } } } defendLord.CurLordToil.UpdateAllDuties(); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Travel lordToil_Travel = (LordToil_Travel)(stateGraph.StartingToil = new LordToil_Travel(this.travelDest)); LordToil_DefendPoint lordToil_DefendPoint = new LordToil_DefendPoint(false); stateGraph.AddToil(lordToil_DefendPoint); Transition transition = new Transition(lordToil_Travel, lordToil_DefendPoint); transition.AddTrigger(new Trigger_PawnHarmed(1f, false)); transition.AddPreAction(new TransitionAction_SetDefendLocalGroup()); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_DefendPoint, lordToil_Travel); transition2.AddTrigger(new Trigger_TicksPassedWithoutHarm(1200)); transition2.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition2); return(stateGraph); }
public override void DoAction(Transition trans) { LordToil_DefendPoint lordToil_DefendPoint = (LordToil_DefendPoint)trans.target; lordToil_DefendPoint.SetDefendPoint(lordToil_DefendPoint.lord.ownedPawns.RandomElement().Position); }
public void SendAssaultWave(Faction faction, bool finalAssault = false) { Lord assaultLord = null; Lord defendLord = null; List <Lord> allLords = this.SingleMap.lordManager.lords; for (int i = 0; i < allLords.Count; i++) { Lord lord = allLords[i]; if (lord.faction != null && lord.faction == faction) { if (lord.CurLordToil != null && lord.CurLordToil is LordToil_DefendPoint) { defendLord = lord; LordToil_DefendPoint lordToil = defendLord.CurLordToil as LordToil_DefendPoint; lordToil.SetDefendPoint(this.centerLocation.ToIntVec3); } else if (lord.CurLordToil != null && lord.CurLordToil is LordToil_AssaultColony) { assaultLord = lord; } } } if (assaultLord == null) { LordJob_AssaultColony lordJob = new LordJob_AssaultColony(faction, false, false, false, false, false); Traverse.Create(root: lordJob).Field(name: "canTimeoutOrFlee").SetValue(false); assaultLord = LordMaker.MakeNewLord(faction, lordJob, this.SingleMap, null); } if (defendLord == null) { LordJob_DefendPoint lordJob = new LordJob_DefendPoint(this.centerLocation.ToIntVec3); defendLord = LordMaker.MakeNewLord(faction, lordJob, this.SingleMap, null); } List <Pawn> allPawns = this.SingleMap.mapPawns.AllPawnsSpawned; for (int i = 0; i < allPawns.Count; i++) { if (allPawns[i].Faction != null && allPawns[i].Faction == faction) { Lord pawnLord = allPawns[i].GetLord(); if (allPawns[i].def == TorannMagicDefOf.TM_SkeletonR && pawnLord != null) { if (pawnLord != null) { if (pawnLord != assaultLord && (Rand.Chance(.4f) || finalAssault)) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); assaultLord.AddPawn(allPawns[i]); } } else { defendLord.AddPawn(allPawns[i]); } } if (allPawns[i].def == TorannMagicDefOf.TM_GiantSkeletonR && pawnLord != null) { if (pawnLord != null) { if (pawnLord != assaultLord && (Rand.Chance(.25f) || finalAssault)) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); assaultLord.AddPawn(allPawns[i]); } } else { defendLord.AddPawn(allPawns[i]); } } if (allPawns[i].def == TorannMagicDefOf.TM_SkeletonLichR) { if (finalAssault) { if (pawnLord != null && pawnLord != assaultLord) { allPawns[i].GetLord()?.Notify_PawnLost(allPawns[i], PawnLostCondition.ForcedToJoinOtherLord); //pawnLord.ownedPawns.Remove(allPawns[i]); } assaultLord.AddPawn(allPawns[i]); } } } } }
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(); 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); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Travel travelToil = new LordToil_Travel(this.targetDestination); stateGraph.StartingToil = travelToil; LordToil_DefendPoint defendPointToil = new LordToil_DefendPoint(false); stateGraph.AddToil(defendPointToil); LordToil_BoardSpaceship boardSpaceshipToil = new LordToil_BoardSpaceship(this.targetDestination, LocomotionUrgency.Walk); stateGraph.AddToil(boardSpaceshipToil); LordToil_EscortDownedPawn escortDownedPawnPeacefullyToil = new LordToil_EscortDownedPawn(this.targetDestination, LocomotionUrgency.Walk); stateGraph.AddToil(escortDownedPawnPeacefullyToil); LordToil exitMap = stateGraph.AttachSubgraph(new LordJob_ExitMap(IntVec3.Invalid).CreateGraph()).StartingToil; // Defend. stateGraph.AddTransition(new Transition(travelToil, defendPointToil) { triggers = { new Trigger_PawnHarmed(1f, false) }, preActions = { new TransitionAction_SetDefendLocalGroup() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to travel after defending. stateGraph.AddTransition(new Transition(defendPointToil, travelToil) { triggers = { new Trigger_TicksPassedWithoutHarm(1200) } }); // Escort downed pawn peacefully. stateGraph.AddTransition(new Transition(travelToil, escortDownedPawnPeacefullyToil) { triggers = { new Trigger_ReachableDownedPawn() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to travel after escorting pawn peacefully. stateGraph.AddTransition(new Transition(escortDownedPawnPeacefullyToil, travelToil) { triggers = { new Trigger_Memo("RescueEnded") } }); // Board dispatcher. stateGraph.AddTransition(new Transition(travelToil, boardSpaceshipToil) { triggers = { new Trigger_Memo("TravelArrived") }, postActions = { new TransitionAction_EndAllJobs() } }); // Exit map. stateGraph.AddTransition(new Transition(travelToil, exitMap) { sources = { escortDownedPawnPeacefullyToil, boardSpaceshipToil }, triggers = { new Trigger_PawnCannotReachTargetDestination() }, postActions = { new TransitionAction_CancelDispatcherPick(), new TransitionAction_EndAllJobs() } }); // Exit map. This transition does not include travelToil as the dispatcher is not landed when the team begins travelling. stateGraph.AddTransition(new Transition(escortDownedPawnPeacefullyToil, exitMap) { sources = { boardSpaceshipToil }, triggers = { new Trigger_SpaceshipNotFound() }, postActions = { new TransitionAction_CancelDispatcherPick(), new TransitionAction_EndAllJobs() } }); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = stateGraph.StartingToil = stateGraph.AttachSubgraph(new LordJob_Travel(chillSpot).CreateGraph()).StartingToil; LordToil_DefendPoint lordToil_DefendPoint = new LordToil_DefendPoint(chillSpot); stateGraph.AddToil(lordToil_DefendPoint); 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_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Walk, canDig: true); stateGraph.AddToil(lordToil_ExitMap); // Transition transition = new Transition(lordToil, startingToil2); transition.AddSources(lordToil_DefendPoint); transition.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures()); transition.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); transition.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition); // Transition transition2 = new Transition(lordToil, lordToil_ExitMap); transition2.AddSources(lordToil_DefendPoint, lordToil_TakeWoundedGuest); transition2.AddSources(stateGraph2.lordToils); transition2.AddTrigger(new Trigger_PawnCannotReachMapEdge()); transition2.AddPreAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); stateGraph.AddTransition(transition2); // Transition transition3 = new Transition(lordToil_ExitMap, startingToil2); transition3.AddTrigger(new Trigger_PawnCanReachMapEdge()); transition3.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition3.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition3); // Transition transition4 = new Transition(lordToil, lordToil_DefendPoint); transition4.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition4); // Transition transition5 = new Transition(lordToil_DefendPoint, lordToil_TakeWoundedGuest); transition5.AddTrigger(new Trigger_WoundedGuestPresent()); transition5.AddPreAction(new TransitionAction_Message("MessageVisitorsTakingWounded".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name))); stateGraph.AddTransition(transition5); //? Transition transition6 = new Transition(lordToil_DefendPoint, target); transition6.AddSources(lordToil_TakeWoundedGuest, lordToil); transition6.AddTrigger(new Trigger_BecamePlayerEnemy()); transition6.AddPreAction(new TransitionAction_SetDefendLocalGroup()); transition6.AddPostAction(new TransitionAction_WakeAll()); transition6.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition6); //Leaving! Transition transition7 = new Transition(lordToil_DefendPoint, startingToil2); transition7.AddTrigger(new Trigger_TickCondition(() => Find.World.GetComponent <WorldComponent_FactionsTracker>().joinedFactionDef != null, 250)); //transition7.AddTrigger(new Trigger_Memo("GetOutOfDodge")); //Trigger_Custom((TriggerSignal x) => //)); //transition7.AddTrigger(new Trigger_TicksPassed((!DebugSettings.instantVisitorsGift) ? Rand.Range(8000, 22000) : 0)); transition7.AddPreAction(new TransitionAction_Message("VisitorsLeaving".Translate(faction.Name))); transition7.AddPreAction(new TransitionAction_CheckGiveGift()); transition7.AddPostAction(new TransitionAction_WakeAll()); transition7.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition7); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; LordToil lordToil2 = null; if (this.sappers) { lordToil = new LordToil_AssaultColonySappers(); if (this.useAvoidGridSmart) { lordToil.avoidGridMode = AvoidGridMode.Smart; } stateGraph.AddToil(lordToil); lordToil2 = new LordToil_DefendPoint(false); stateGraph.AddToil(lordToil2); Transition transition = new Transition(lordToil, lordToil2); transition.AddTrigger(new Trigger_PawnHarmed(1f, false).WithFilter(new TriggerFilter_NoSapperSapping())); transition.AddPreAction(new TransitionAction_SetDefendLocalGroup()); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil2, lordToil); transition2.AddTrigger(new Trigger_TicksPassedWithoutHarm(900)); stateGraph.AddTransition(transition2); } LordToil lordToil3 = new LordToil_AssaultColony(); if (this.useAvoidGridSmart) { lordToil3.avoidGridMode = AvoidGridMode.Smart; } stateGraph.AddToil(lordToil3); 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, lordToil3); transition3.AddSource(lordToil2); transition3.AddTrigger(new Trigger_NoFightingSappers()); stateGraph.AddTransition(transition3); } if (this.assaulterFaction.def.humanlikeFaction) { if (this.canTimeoutOrFlee) { Transition transition4 = new Transition(lordToil3, lordToil_ExitMap); 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(this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name))); stateGraph.AddTransition(transition4); Transition transition5 = new Transition(lordToil3, lordToil_ExitMap); if (lordToil != null) { transition5.AddSource(lordToil); } float randomInRange = new FloatRange(0.25f, 0.35f).RandomInRange; transition5.AddTrigger(new Trigger_FractionColonyDamageTaken(randomInRange, 900f)); transition5.AddPreAction(new TransitionAction_Message("MessageRaidersSatisfiedLeaving".Translate(this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name))); stateGraph.AddTransition(transition5); } if (this.canKidnap) { LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Kidnap().CreateGraph()).StartingToil; Transition transition6 = new Transition(lordToil3, startingToil); if (lordToil != null) { transition6.AddSource(lordToil); } transition6.AddPreAction(new TransitionAction_Message("MessageRaidersKidnapping".Translate(this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name))); transition6.AddTrigger(new Trigger_KidnapVictimPresent()); stateGraph.AddTransition(transition6); } if (this.canSteal) { LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_Steal().CreateGraph()).StartingToil; Transition transition7 = new Transition(lordToil3, startingToil2); if (lordToil != null) { transition7.AddSource(lordToil); } transition7.AddPreAction(new TransitionAction_Message("MessageRaidersStealing".Translate(this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name))); transition7.AddTrigger(new Trigger_HighValueThingsAround()); stateGraph.AddTransition(transition7); } } Transition transition8 = new Transition(lordToil3, lordToil_ExitMap); if (lordToil != null) { transition8.AddSource(lordToil); } transition8.AddTrigger(new Trigger_BecameColonyAlly()); transition8.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(this.assaulterFaction.def.pawnsPlural.CapitalizeFirst(), this.assaulterFaction.Name))); stateGraph.AddTransition(transition8); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.chillSpot).CreateGraph()).StartingToil; stateGraph.StartingToil = startingToil; LordToil_DefendPoint lordToil_DefendPoint = new LordToil_DefendPoint(this.chillSpot, 28f); stateGraph.AddToil(lordToil_DefendPoint); 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_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Walk, true); stateGraph.AddToil(lordToil_ExitMap); Transition transition = new Transition(startingToil, startingToil2, false, true); transition.AddSources(new LordToil[] { lordToil_DefendPoint }); transition.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures()); transition.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name), null, 1f)); transition.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(startingToil, lordToil_ExitMap, false, true); transition2.AddSources(new LordToil[] { lordToil_DefendPoint, lordToil_TakeWoundedGuest }); transition2.AddSources(stateGraph2.lordToils); transition2.AddTrigger(new Trigger_PawnCannotReachMapEdge()); transition2.AddPreAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name), null, 1f)); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_ExitMap, startingToil2, false, true); transition3.AddTrigger(new Trigger_PawnCanReachMapEdge()); transition3.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition3.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(startingToil, lordToil_DefendPoint, false, true); transition4.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition4, false); Transition transition5 = new Transition(lordToil_DefendPoint, lordToil_TakeWoundedGuest, false, true); transition5.AddTrigger(new Trigger_WoundedGuestPresent()); transition5.AddPreAction(new TransitionAction_Message("MessageVisitorsTakingWounded".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name), null, 1f)); stateGraph.AddTransition(transition5, false); Transition transition6 = new Transition(lordToil_DefendPoint, target, false, true); transition6.AddSources(new LordToil[] { lordToil_TakeWoundedGuest, startingToil }); transition6.AddTrigger(new Trigger_BecamePlayerEnemy()); transition6.AddPreAction(new TransitionAction_SetDefendLocalGroup()); transition6.AddPostAction(new TransitionAction_WakeAll()); transition6.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition6, false); Transition transition7 = new Transition(lordToil_DefendPoint, startingToil2, false, true); transition7.AddTrigger(new Trigger_TicksPassed((!DebugSettings.instantVisitorsGift) ? Rand.Range(8000, 22000) : 0)); transition7.AddPreAction(new TransitionAction_Message("VisitorsLeaving".Translate(this.faction.Name), null, 1f)); transition7.AddPreAction(new TransitionAction_CheckGiveGift()); transition7.AddPostAction(new TransitionAction_WakeAll()); transition7.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition7, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_DefendPoint dropToil = new LordToil_DefendPoint(true); stateGraph.StartingToil = dropToil; // Just used to verify the exit spot is valid. LordToil_Travel travelToil = new LordToil_Travel(this.targetDestination); stateGraph.AddToil(travelToil); LordToil_DefendPoint defendPointToil = new LordToil_DefendPoint(false); stateGraph.AddToil(defendPointToil); LordToil_ExitMap exitMapPeacefullyToil = new LordToil_ExitMap(LocomotionUrgency.Walk, false); stateGraph.AddToil(exitMapPeacefullyToil); LordToil_EscortDownedPawn escortDownedPawnPeacefullyToil = new LordToil_EscortDownedPawn(this.targetDestination, LocomotionUrgency.Walk); stateGraph.AddToil(escortDownedPawnPeacefullyToil); LordToil_ExitMap exitMapHurryToil = new LordToil_ExitMap(LocomotionUrgency.Jog, true); stateGraph.AddToil(exitMapHurryToil); LordToil_DefendPoint defendPointHurryToil = new LordToil_DefendPoint(false); stateGraph.AddToil(defendPointHurryToil); LordToil_EscortDownedPawn escortDownedPawnHurryToil = new LordToil_EscortDownedPawn(this.targetDestination, LocomotionUrgency.Jog); stateGraph.AddToil(escortDownedPawnHurryToil); // Begin travel. stateGraph.AddTransition(new Transition(dropToil, travelToil) { triggers = { new Trigger_TicksPassedWithoutHarm(1) }, preActions = { new TransitionAction_CheckExitSpotIsValid() }, postActions = { new TransitionAction_EndAllJobs() } }); // Defend. stateGraph.AddTransition(new Transition(travelToil, defendPointToil) { triggers = { new Trigger_PawnHarmed(1f, false) }, preActions = { new TransitionAction_SetDefendLocalGroup() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to travel after defending. stateGraph.AddTransition(new Transition(defendPointToil, travelToil) { triggers = { new Trigger_TicksPassedWithoutHarm(1200) }, preActions = { new TransitionAction_EnsureHaveExitDestination() } }); // Escort downed pawn peacefully. stateGraph.AddTransition(new Transition(travelToil, escortDownedPawnPeacefullyToil) { sources = { exitMapPeacefullyToil }, triggers = { new Trigger_ReachableDownedPawn() }, preActions = { new TransitionAction_CheckExitSpotIsValid() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to travel after escorting pawn peacefully. stateGraph.AddTransition(new Transition(escortDownedPawnPeacefullyToil, travelToil) { triggers = { new Trigger_Memo("RescueEnded") } }); // Exit peacefully. stateGraph.AddTransition(new Transition(travelToil, exitMapPeacefullyToil) { triggers = { new Trigger_Memo("TravelArrived") }, postActions = { new TransitionAction_EndAllJobs() } }); // Exit in hurry. stateGraph.AddTransition(new Transition(travelToil, exitMapHurryToil) { sources = { exitMapPeacefullyToil, escortDownedPawnPeacefullyToil }, triggers = { new Trigger_PawnCannotReachTargetDestination(), new Trigger_HostileToColony() }, postActions = { new TransitionAction_EndAllJobs() } }); // Defend in hurry. stateGraph.AddTransition(new Transition(exitMapHurryToil, defendPointHurryToil) { triggers = { new Trigger_PawnHarmed(1f, false) }, preActions = { new TransitionAction_SetDefendLocalGroup() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to exit in hurry after defending. stateGraph.AddTransition(new Transition(defendPointHurryToil, exitMapHurryToil) { triggers = { new Trigger_TicksPassedWithoutHarm(1200) } }); // Escort downed pawn in hurry. stateGraph.AddTransition(new Transition(exitMapHurryToil, escortDownedPawnHurryToil) { triggers = { new Trigger_ReachableDownedPawn() }, preActions = { new TransitionAction_CheckExitSpotIsValid() }, postActions = { new TransitionAction_EndAllJobs() } }); // Back to exit in hurry after escorting pawn in hurry. stateGraph.AddTransition(new Transition(escortDownedPawnHurryToil, exitMapHurryToil) { triggers = { new Trigger_Memo("RescueEnded") } }); return(stateGraph); }