示例#1
0
        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);
        }
示例#3
0
 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);
        }
示例#7
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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);
        }
示例#12
0
 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;
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#18
0
        // 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);
        }
示例#19
0
        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);
        }
示例#21
0
        //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);
        }
示例#22
0
        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);
        }
示例#24
0
 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);
        }
示例#26
0
        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);
        }
示例#28
0
        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);
        }
示例#29
0
        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);
        }
示例#30
0
        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);
        }