public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil_Steal = stateGraph.AttachSubgraph(new LordJob_TenantSteal().CreateGraph()).StartingToil; return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil party = CreateGatheringToil(spot, organizer, gatheringDef); stateGraph.AddToil(party); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); Transition transition = new Transition(party, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(() => ShouldBeCalledOff())); transition.AddTrigger(new Trigger_PawnKilled()); transition.AddTrigger(new Trigger_PawnLost(PawnLostCondition.LeftVoluntarily, organizer)); transition.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome((LordToil_Party)party); })); transition.AddPreAction(new TransitionAction_Message(gatheringDef.calledOffMessage, MessageTypeDefOf.NegativeEvent, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition); timeoutTrigger = GetTimeoutTrigger(); Transition transition2 = new Transition(party, lordToil_End); transition2.AddTrigger(timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome((LordToil_Party)party); })); transition2.AddPreAction(new TransitionAction_Message(gatheringDef.finishedMessage, MessageTypeDefOf.SituationResolved, new TargetInfo(spot, base.Map))); stateGraph.AddTransition(transition2); return(stateGraph); }
public override void SourceToilBecameActive(Transition transition, LordToil previousToil) { if (!transition.sources.Contains(previousToil)) { Data.startColonyDamage = transition.Map.damageWatcher.DamageTakenEver; } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.siegeSpot).CreateGraph()).StartingToil; LordToil_Siege lordToil_Siege = new LordToil_Siege(this.siegeSpot, this.blueprintPoints); stateGraph.AddToil(lordToil_Siege); LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()).StartingToil; Transition transition = new Transition(startingToil, lordToil_Siege, false, true); transition.AddTrigger(new Trigger_Memo("TravelArrived")); transition.AddTrigger(new Trigger_TicksPassed(5000)); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_Siege, startingToil2, false, true); transition2.AddTrigger(new Trigger_Memo("NoBuilders")); transition2.AddTrigger(new Trigger_Memo("NoArtillery")); transition2.AddTrigger(new Trigger_PawnHarmed(0.08f, false, null)); 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(new object[] { this.faction.def.pawnsPlural, this.faction }), MessageTypeDefOf.ThreatBig, null, 1f)); transition2.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition2); return(stateGraph); }
static void Postfix(LordJob_FormAndSendCaravan __instance, ref StateGraph __result) { // This patch modifies the return value of LordJob_FormAndSendCaravan.CreateGraph // The CreateGraph function generates a finite state machine that controls caravan formation. // Each state is a LordToil. // We need to make a few changes to that state machine. Traverse tthis = Traverse.Create(__instance); IntVec3 meetingPoint = tthis.Field("meetingPoint").GetValue <IntVec3>(); // All we need to do is replace the GatherAnimals and GatherSlaves LordToils with our versions. // OLD VERSIONS LordToil oldGatherAnimals = tthis.Field("gatherAnimals").GetValue <LordToil>(); LordToil oldGatherSlaves = tthis.Field("gatherSlaves").GetValue <LordToil>(); // OUR NEW VERSIONS LordToil_BillyCaravan_GatherAnimals billyGatherAnimals = new LordToil_BillyCaravan_GatherAnimals(meetingPoint); LordToil_BillyCaravan_GatherSlaves billyGatherSlaves = new LordToil_BillyCaravan_GatherSlaves(meetingPoint); // REPLACE member variables with new versions tthis.Field("gatherAnimals").SetValue(billyGatherAnimals); tthis.Field("gatherSlaves").SetValue(billyGatherSlaves); // REPLACE states in state machine with new versions __result = __result.ReplaceState(oldGatherAnimals, billyGatherAnimals); __result = __result.ReplaceState(oldGatherSlaves, billyGatherSlaves); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil disco = CreateGatheringToil(spot, organizer, gatheringDef); stateGraph.AddToil(disco); LordToil_End lordToilEnd = new LordToil_End(); stateGraph.AddToil(lordToilEnd); Transition callOffTransition = new Transition(disco, lordToilEnd); callOffTransition.AddTrigger(new Trigger_TickCondition(this.ShouldBeCalledOff)); callOffTransition.AddTrigger(new Trigger_PawnKilled()); callOffTransition.AddTrigger(new Trigger_PawnLost(PawnLostCondition.LeftVoluntarily, this.organizer)); callOffTransition.AddPreAction(new TransitionAction_Custom(() => ApplyOutcome((LordToil_Disco)disco))); callOffTransition.AddPreAction(new TransitionAction_Message(this.gatheringDef.calledOffMessage, MessageTypeDefOf.NegativeEvent, new TargetInfo(spot, Map))); stateGraph.AddTransition(callOffTransition); timeoutTrigger = GetTimeoutTrigger(); Transition naturalEndTransition = new Transition(disco, lordToilEnd); naturalEndTransition.AddTrigger(this.timeoutTrigger); naturalEndTransition.AddPreAction(new TransitionAction_Custom(() => ApplyOutcome((LordToil_Disco)disco))); naturalEndTransition.AddPreAction(new TransitionAction_Message(gatheringDef.finishedMessage, MessageTypeDefOf.SituationResolved, new TargetInfo(spot, Map))); stateGraph.AddTransition(naturalEndTransition); Core.Log("Created disco state graph."); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Arson fireToil = new LordToil_Arson(FireSpot); stateGraph.StartingToil = fireToil; LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); LordToil startingToil2 = stateGraph.AttachSubgraph(new LordJob_AssaultColony(Faction).CreateGraph()).StartingToil; Transition transition2 = new Transition(fireToil, startingToil2); transition2.AddTrigger(new Trigger_FractionPawnsLost(0.1f)); stateGraph.AddTransition(transition2); timeoutTrigger = new Trigger_TicksPassed(Rand.RangeInclusive(25000, 50000)); Transition transition3 = new Transition(fireToil, lordToil_End); transition3.AddTrigger(timeoutTrigger); transition3.AddPreAction(new TransitionAction_Message("ArsonOut".Translate(), MessageTypeDefOf.SituationResolved)); stateGraph.AddTransition(transition3); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = CreateGatheringToil(spot, organizer, gatheringDef); stateGraph.AddToil(lordToil); LordToil_End lordToil_End = new LordToil_End(); stateGraph.AddToil(lordToil_End); float speechDuration = 12500f; Transition transition = new Transition(lordToil, lordToil_End); transition.AddTrigger(new Trigger_TickCondition(ShouldBeCalledOff)); transition.AddTrigger(new Trigger_PawnKilled()); transition.AddTrigger(new Trigger_PawnLost(PawnLostCondition.LeftVoluntarily, organizer)); transition.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome((float)lord.ticksInToil / speechDuration); })); stateGraph.AddTransition(transition); timeoutTrigger = new Trigger_TicksPassedAfterConditionMet((int)speechDuration, () => GatheringsUtility.InGatheringArea(organizer.Position, spot, organizer.Map), 60); Transition transition2 = new Transition(lordToil, lordToil_End); transition2.AddTrigger(timeoutTrigger); transition2.AddPreAction(new TransitionAction_Custom((Action) delegate { ApplyOutcome(1f); })); stateGraph.AddTransition(transition2); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_EscortPawn lordToil_EscortPawn = new LordToil_EscortPawn(escortee); stateGraph.AddToil(lordToil_EscortPawn); LordToil lordToil = ((shuttle == null) ? ((LordToil) new LordToil_ExitMap()) : ((LordToil) new LordToil_EnterShuttleOrLeave(shuttle))); stateGraph.AddToil(lordToil); Transition transition = new Transition(lordToil_EscortPawn, lordToil); Trigger_Custom trigger = new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && escortee.Dead); transition.AddTrigger(trigger); stateGraph.AddTransition(transition); Transition transition2 = new Transition(lordToil_EscortPawn, lordToil); Trigger_Custom trigger2 = new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && (escortee.MapHeld != lord.Map || (shuttle != null && escortee.ParentHolder == shuttle.TryGetComp <CompTransporter>() && !shuttle.TryGetComp <CompShuttle>().dropEverythingOnArrival))); transition2.AddTrigger(trigger2); stateGraph.AddTransition(transition2); Transition transition3 = new Transition(lordToil_EscortPawn, lordToil); transition3.AddTrigger(new Trigger_BecamePlayerEnemy()); stateGraph.AddTransition(transition3); Transition transition4 = new Transition(lordToil_EscortPawn, lordToil); transition4.AddTrigger(new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.Tick && escortee.Faction != escorteeFaction)); stateGraph.AddTransition(transition4); return(stateGraph); }
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 lordToil = stateGraph.StartingToil = stateGraph.AttachSubgraph(new LordJob_Travel(spot).CreateGraph()).StartingToil; LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Walk, canDig: true); stateGraph.AddToil(lordToil_ExitMap); Transition transition = new Transition(lordToil, lordToil_ExitMap); transition.AddTrigger(new Trigger_Memo("TravelArrived")); transition.AddPreAction(new TransitionAction_Custom(delegate(Transition t) { IntVec3 seekPos = gifters.First().Position; foreach (var p in gifters) { p.inventory.innerContainer.TryDropAll(p.Position, p.Map, ThingPlaceMode.Near); } Find.LetterStack.ReceiveLetter("GiftHasBeenDroppedTitle".Translate(), "GiftHasBeenDropped".Translate(), LetterDefOf.PositiveEvent, new LookTargets(seekPos, Map)); })); stateGraph.AddTransition(transition); return(stateGraph); }
public override void SourceToilBecameActive(Transition transition, LordToil previousToil) { if (!transition.sources.Contains(previousToil)) { downingMomentum = 0; killingMomentum = 0; } }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_HuntEnemies lordToil_HuntEnemies = new LordToil_HuntEnemies(this.fallbackLocation); stateGraph.AddToil(lordToil_HuntEnemies); StateGraph stateGraph2 = new LordJob_Travel(IntVec3.Invalid).CreateGraph(); LordToil startingToil = 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(lordToil_HuntEnemies, startingToil, false, true); transition.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(new object[] { this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name }), null, 1f)); transition.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); transition.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures()); transition.AddPostAction(new TransitionAction_EndAllJobs()); stateGraph.AddTransition(transition, false); Transition transition2 = new Transition(lordToil_HuntEnemies, lordToil_ExitMap2, false, true); transition2.AddSource(lordToil_ExitMap); transition2.AddSources(stateGraph2.lordToils); transition2.AddPreAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(new object[] { this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name }), null, 1f)); transition2.AddTrigger(new Trigger_PawnCannotReachMapEdge()); stateGraph.AddTransition(transition2, false); Transition transition3 = new Transition(lordToil_ExitMap2, startingToil, false, true); transition3.AddTrigger(new Trigger_PawnCanReachMapEdge()); transition3.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition3, false); Transition transition4 = new Transition(lordToil_HuntEnemies, startingToil, false, true); transition4.AddPreAction(new TransitionAction_Message("MessageFriendlyFightersLeaving".Translate(new object[] { this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name }), null, 1f)); transition4.AddTrigger(new Trigger_TicksPassed(25000)); transition4.AddPreAction(new TransitionAction_EnsureHaveExitDestination()); stateGraph.AddTransition(transition4, false); Transition transition5 = new Transition(startingToil, lordToil_ExitMap, false, true); transition5.AddTrigger(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition5, false); return(stateGraph); }
private Transition UnpauseTransition(LordToil from, LordToil to) { Transition transition = new Transition(from, to, false, true); transition.AddPreAction(new TransitionAction_Message("MessageCaravanFormationUnpaused".Translate(), MessageTypeDefOf.SilentInput, null, 1f)); transition.AddTrigger(new Trigger_NoMentalState()); transition.AddPostAction(new TransitionAction_EndAllJobs()); return(transition); }
private Transition PauseTransition(LordToil from, LordToil to) { Transition transition = new Transition(from, to); transition.AddPreAction(new TransitionAction_Message("MessageCaravanFormationPaused".Translate(), MessageTypeDefOf.NegativeEvent)); transition.AddTrigger(new Trigger_MentalState()); transition.AddPostAction(new TransitionAction_EndAllJobs()); return(transition); }
private Transition PauseTransition(LordToil from, LordToil to) { Transition transition = new Transition(from, to, false, true); transition.AddPreAction(new TransitionAction_Message("MessageCaravanFormationPaused".Translate(), MessageTypeDefOf.NegativeEvent, () => this.lord.ownedPawns.FirstOrDefault((Pawn x) => x.InMentalState), null, 1f)); transition.AddTrigger(new Trigger_MentalState()); transition.AddPostAction(new TransitionAction_EndAllJobs()); return(transition); }
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: 0x06000093 RID: 147 RVA: 0x000045A4 File Offset: 0x000027A4 public override StateGraph CreateGraph() { var stateGraph = new StateGraph(); LordToil lordToil = new LordToil_PrePerformance(Venue); LordToil lordToil2 = new LordToil_SettleForPerformance(Venue); LordToil performanceLordToil = GetPerformanceLordToil(); LordToil lordToil3 = new LordToil_EndPerformance(Venue); stateGraph.AddToil(lordToil); stateGraph.AddToil(lordToil2); stateGraph.AddToil(performanceLordToil); stateGraph.AddToil(lordToil3); var transition = new Transition(lordToil, lordToil2, false, true); var transition2 = new Transition(lordToil, lordToil3, false, true); var transition3 = new Transition(lordToil, lordToil3, false, true); transition.AddPreAction(new TransitionAction_Message(Translator.Translate("RAZ_PerformanceStarting"), MessageTypeDefOf.PositiveEvent, null, 1f)); transition.AddPreAction(new TransitionAction_Custom(delegate() { Venue.ticksIntoThisPerformance = 0; })); transition.AddTrigger(new Trigger_TickCondition(() => lord.ticksInToil >= 3000 && PerformersAreReady(), 1)); transition2.AddTrigger(new Trigger_TickCondition(() => lord.ticksInToil >= 6000, 1)); transition2.AddPreAction(new TransitionAction_Message(Translator.Translate("RAZ_PerformanceCancelledLate"), null, 1f)); transition3.AddTrigger(new Trigger_TickCondition(() => ShouldPlayBeCalledOff(), 1)); transition3.AddPreAction(new TransitionAction_Message(Translator.Translate("RAZ_PerformanceCancelledThreat"), null, 1f)); stateGraph.AddTransition(transition, false); stateGraph.AddTransition(transition2, false); stateGraph.AddTransition(transition3, false); var transition4 = new Transition(lordToil2, performanceLordToil, false, true); var transition5 = new Transition(lordToil2, lordToil3, false, true); transition4.AddTrigger(new Trigger_TickCondition(() => lord.ticksInToil > 500, 1)); transition5.AddTrigger(new Trigger_TickCondition(() => ShouldPlayBeCalledOff(), 1)); stateGraph.AddTransition(transition4, false); stateGraph.AddTransition(transition5, false); var transition6 = new Transition(performanceLordToil, lordToil3, false, true); transition6.AddTrigger(new Trigger_TickCondition(() => HasPerformanceFinished() || lord.ticksInToil > 16000, 1)); transition6.AddPreAction(new TransitionAction_EndAllJobs()); transition6.AddPreAction(new TransitionAction_Custom(delegate() { GiveWatchedPlayThoughts(); })); var transition7 = new Transition(performanceLordToil, lordToil3, false, true); transition7.AddTrigger(new Trigger_TickCondition(() => ShouldPlayBeCalledOff(), 1)); transition7.AddPreAction(new TransitionAction_Message(Translator.Translate("RAZ_PerformanceCancelledThreat"), null, 1f)); stateGraph.AddTransition(transition6, false); stateGraph.AddTransition(transition7, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil firstSource = stateGraph.StartingToil = stateGraph.AttachSubgraph(new LordJob_Travel(travelDest).CreateGraph()).StartingToil; LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(); stateGraph.AddToil(lordToil_ExitMap); Transition transition = new Transition(firstSource, lordToil_ExitMap); transition.triggers.Add(new Trigger_Memo("TravelArrived")); stateGraph.AddTransition(transition); return(stateGraph); }
// Token: 0x0600078A RID: 1930 RVA: 0x0004280C File Offset: 0x00040C0C public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; LordToil lordToil2 = new LordToil_AssaultColony_CutPower(false); if (this.useAvoidGridSmart) { lordToil2.useAvoidGrid = true; } stateGraph.AddToil(lordToil2); return(stateGraph); }
//NewRatkin.LordJob_BombPlanting:LordJob public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(defendingSpot).CreateGraph()).StartingToil; //거점 방어 상태 LordToil_DefendBomb lordToil_Siege = new LordToil_DefendBomb(defendingSpot, eventPoint); stateGraph.AddToil(lordToil_Siege); //목적지 이동 트랜지션 Transition moveToDest = new Transition(startingToil, lordToil_Siege, false, true); moveToDest.AddTrigger(new Trigger_Memo("TravelArrived")); moveToDest.AddTrigger(new Trigger_TicksPassed(5000)); stateGraph.AddTransition(moveToDest, false); //정착지 공격 상태 LordToil noFleeAssaultColony = new LordToil_AssaultColony(false); noFleeAssaultColony.useAvoidGrid = true; stateGraph.AddToil(noFleeAssaultColony); //정착지 공격 트랜잭션 Transition assultColony = new Transition(lordToil_Siege, noFleeAssaultColony, false, true); assultColony.AddTrigger(new Trigger_Memo("NoBuilders")); assultColony.AddTrigger(new Trigger_Memo("NoBomb")); assultColony.AddTrigger(new Trigger_TicksPassed(15000)); FloatRange floatRange = new FloatRange(0.25f, 0.35f); float randomInRange = floatRange.RandomInRange; assultColony.AddPreAction(new TransitionAction_Message("MessageCommandoAssaulting".Translate(faction.def.pawnsPlural, faction), MessageTypeDefOf.ThreatBig, null, 1f)); assultColony.AddPostAction(new TransitionAction_WakeAll()); //퇴각 상태 LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, false); lordToil_ExitMap.useAvoidGrid = true; stateGraph.AddToil(lordToil_ExitMap); //퇴각 트랜지션 Transition exitMap = new Transition(noFleeAssaultColony, lordToil_ExitMap, false, true); exitMap.AddTrigger(new Trigger_FractionColonyDamageTaken(randomInRange, 1200)); exitMap.AddPreAction(new TransitionAction_Message("MessageRaidersSatisfiedLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name), null, 1f)); stateGraph.AddTransition(assultColony, false); stateGraph.AddTransition(exitMap, false); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Stage firstSource = (LordToil_Stage)(stateGraph.StartingToil = new LordToil_Stage(this.stageLoc)); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()).StartingToil; Transition transition = new Transition(firstSource, startingToil); transition.AddTrigger(new Trigger_TicksPassed(Rand.Range(5000, 15000))); transition.AddTrigger(new Trigger_FractionPawnsLost(0.3f)); transition.AddPreAction(new TransitionAction_Message("MessageRaidersBeginningAssault".Translate(this.faction.def.pawnsPlural.CapitalizeFirst(), this.faction.Name), MessageTypeDefOf.ThreatBig)); transition.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil lordToil = null; lordToil = new LordToil_MeeseeksKillCreator(); if (useAvoidGridSmart) { lordToil.useAvoidGrid = true; } stateGraph.AddToil(lordToil); return(stateGraph); }
private static void ForceEnemyFlee() { foreach (Lord lord in Find.CurrentMap.lordManager.lords) { if (lord.faction != null && lord.faction.HostileTo(Faction.OfPlayer) && lord.faction.def.autoFlee) { LordToil lordToil = lord.Graph.lordToils.FirstOrDefault((LordToil st) => st is LordToil_PanicFlee); if (lordToil != null) { lord.GotoToil(lordToil); } } } }
public static Transition ReplaceState(this Transition self, LordToil old_state, LordToil new_state) { if (self.target == old_state) { self.target = new_state; } int index = self.sources.IndexOf(old_state); if (index != -1) { self.sources[index] = new_state; } return(self); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Stage lordToil_Stage = new LordToil_Stage(this.stageLoc); stateGraph.StartingToil = lordToil_Stage; LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()).StartingToil; Transition transition = new Transition(lordToil_Stage, startingToil); transition.AddTrigger(new Trigger_TicksPassed(this.ticksUntilAssault)); transition.AddTrigger(new Trigger_FractionPawnsLost(0.3f)); transition.AddPreAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition); return(stateGraph); }
public static StateGraph ReplaceState(this StateGraph self, LordToil old_state, LordToil new_state) { int index = self.lordToils.IndexOf(old_state); while (index != -1) { self.lordToils[index] = new_state; index = self.lordToils.IndexOf(old_state); } for (int i = 0; i < self.transitions.Count; ++i) { self.transitions[i] = self.transitions[i].ReplaceState(old_state, new_state); } return(self); }
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); stateGraph.transitions.Find((Transition x) => x.triggers.Any((Trigger y) => y is Trigger_BecameNonHostileToPlayer)).AddSource(lordToil_Stage); return(stateGraph); }
public override StateGraph CreateGraph() { StateGraph stateGraph = new StateGraph(); LordToil_Sleep firstSource = (LordToil_Sleep)(stateGraph.StartingToil = new LordToil_Sleep()); LordToil startingToil = stateGraph.AttachSubgraph(new LordJob_AssaultColony(faction).CreateGraph()).StartingToil; Transition transition = new Transition(firstSource, startingToil); transition.AddTrigger(new Trigger_PawnHarmed()); transition.AddPreAction(new TransitionAction_Message("MessageSleepingPawnsWokenUp".Translate(faction.def.pawnsPlural).CapitalizeFirst(), MessageTypeDefOf.ThreatBig)); transition.AddPostAction(new TransitionAction_WakeAll()); stateGraph.AddTransition(transition); if (wakeUpIfColonistClose) { transition.AddTrigger(new Trigger_Custom((TriggerSignal x) => Find.TickManager.TicksGame % 30 == 0 && AnyColonistClose())); } return(stateGraph); }
private static bool TryProcessHostilePawn([NotNull] Pawn pawn) { if (pawn.RaceProps.Humanlike) { LordToil fleeToil = pawn.Map.lordManager.LordOf(pawn)?.Graph.lordToils.Find(t => t is LordToil_PanicFlee); if (fleeToil != null) { pawn.Map.lordManager.LordOf(pawn)?.GotoToil(fleeToil); return(true); } } pawn.Kill(new DamageInfo(DamageDefOf.Burn, 100000, 1f, category: DamageInfo.SourceCategory.ThingOrUnknown)); return(true); }