コード例 #1
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph             = new StateGraph();
            LordToil_MillAboutCloseBy chillax = new LordToil_MillAboutCloseBy(locus);

            stateGraph.AddToil(chillax);
            LordToil_ExitMap leaveMap = new LordToil_ExitMap(LocomotionUrgency.Jog);

            Transition signalToLeave = new Transition(chillax, leaveMap);

            signalToLeave.AddTrigger(new Trigger_PawnRecruited());
            signalToLeave.AddTrigger(new Trigger_Custom((signal) => signal.type == TriggerSignalType.FactionRelationsChanged));
            signalToLeave.AddTrigger(new Trigger_FightWon());
            signalToLeave.AddTrigger(new Trigger_Memo("SetFree")); //triggered by ThingComp_RescueMe
            //signalToLeave.AddPostAction(new TransitionAction_Message("prisoners leaving.")); <- in case you want to use that one instead, for added clarity (more generic than PrisonersFreedLGE)
            signalToLeave.AddPostAction(new TransitionAction_WakeAll());
            signalToLeave.AddPostAction(new TransitionAction_Custom(() =>
            {
                Find.World.worldObjects.SiteAt(lord.Map.Tile)?.GetComponent <PrisonerRescueQuestComp>()?.GiveRewardsAndSendLetter();
            }));
            signalToLeave.AddPostAction(new TransitionAction_EndAllJobs());

            stateGraph.AddTransition(signalToLeave);
            stateGraph.AddToil(leaveMap);

            return(stateGraph);
        }
コード例 #2
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();
            LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive();

            lordToil_DefendAndExpandHive.distToHiveToAttack = 10f;
            stateGraph.StartingToil = lordToil_DefendAndExpandHive;
            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony();

            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony);

            transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true));
            transition.AddTrigger(new Trigger_PawnLostViolently());
            transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed));
            transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony);

            transition2.canMoveToSameState = true;
            transition2.AddSource(lordToil_AssaultColony);
            transition2.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed));
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive);

            transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyed, HediffGiver_Heat.MemoPawnBurnedByAir));
            transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs());
            stateGraph.AddTransition(transition3);
            return(stateGraph);
        }
コード例 #3
0
        public override StateGraph CreateGraph()
        {
            StateGraph          stateGraph           = new StateGraph();
            LordToil_DefendBase lordToil_DefendBase  = (LordToil_DefendBase)(stateGraph.StartingToil = new LordToil_DefendBase(this.baseCenter));
            LordToil_DefendBase lordToil_DefendBase2 = new LordToil_DefendBase(this.baseCenter);

            stateGraph.AddToil(lordToil_DefendBase2);
            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony();

            lordToil_AssaultColony.avoidGridMode = AvoidGridMode.Smart;
            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2);

            transition.AddSource(lordToil_AssaultColony);
            transition.AddTrigger(new Trigger_BecameColonyAlly());
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase);

            transition2.AddTrigger(new Trigger_BecameColonyEnemy());
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(lordToil_DefendBase, lordToil_AssaultColony);

            transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f));
            transition3.AddTrigger(new Trigger_PawnHarmed(0.4f, false));
            transition3.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f));
            transition3.AddTrigger(new Trigger_TicksPassed(251999));
            transition3.AddTrigger(new Trigger_UrgentlyHungry());
            transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f));
            transition3.AddPostAction(new TransitionAction_WakeAll());
            string message = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst();

            transition3.AddPreAction(new TransitionAction_Message(message, MessageTypeDefOf.ThreatBig));
            stateGraph.AddTransition(transition3);
            return(stateGraph);
        }
コード例 #4
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();
            LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive();

            lordToil_DefendAndExpandHive.distToHiveToAttack = 10f;
            stateGraph.StartingToil = lordToil_DefendAndExpandHive;
            LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively();

            lordToil_DefendHiveAggressively.distToHiveToAttack = 40f;
            stateGraph.AddToil(lordToil_DefendHiveAggressively);
            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony(false);

            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true);

            transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true, null));
            transition.AddTrigger(new Trigger_PawnLostViolently());
            transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed));
            transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition);
            Transition transition2   = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony, false, true);
            Transition transition3   = transition2;
            float      chance        = 0.5f;
            Faction    parentFaction = base.Map.ParentFaction;

            transition3.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction));
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2);
            Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony, false, true);
            Transition transition5 = transition4;

            chance        = 0.5f;
            parentFaction = base.Map.ParentFaction;
            transition5.AddTrigger(new Trigger_PawnHarmed(chance, false, parentFaction));
            transition4.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition4);
            Transition transition6 = new Transition(lordToil_DefendAndExpandHive, (!this.aggressive) ? lordToil_DefendHiveAggressively : lordToil_AssaultColony, false, true);

            transition6.canMoveToSameState = true;
            transition6.AddSource(lordToil_AssaultColony);
            transition6.AddTrigger(new Trigger_Memo(Hive.MemoDestroyed));
            stateGraph.AddTransition(transition6);
            Transition transition7 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive, false, true);

            transition7.AddSource(lordToil_DefendHiveAggressively);
            transition7.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[]
            {
                Hive.MemoAttackedByEnemy,
                Hive.MemoBurnedBadly,
                Hive.MemoDestroyed,
                HediffGiver_Heat.MemoPawnBurnedByAir
            }));
            transition7.AddPostAction(new TransitionAction_EndAttackBuildingJobs());
            stateGraph.AddTransition(transition7);
            return(stateGraph);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();
            LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive();

            lordToil_DefendAndExpandHive.distToHiveToAttack = 10f;
            stateGraph.StartingToil = lordToil_DefendAndExpandHive;
            LordToil_DefendHiveAggressively lordToil_DefendHiveAggressively = new LordToil_DefendHiveAggressively();

            lordToil_DefendHiveAggressively.distToHiveToAttack = 40f;
            stateGraph.AddToil(lordToil_DefendHiveAggressively);
            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony();

            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendAndExpandHive, (!aggressive) ? ((LordToil)lordToil_DefendHiveAggressively) : ((LordToil)lordToil_AssaultColony));

            transition.AddTrigger(new Trigger_PawnHarmed(0.5f, requireInstigatorWithFaction: true));
            transition.AddTrigger(new Trigger_PawnLostViolently(allowRoofCollapse: false));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoBurnedBadly));
            transition.AddTrigger(new Trigger_Memo(Hive.MemoDestroyedNonRoofCollapse));
            transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition);
            Transition transition2   = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony);
            Transition transition3   = transition2;
            float      chance        = 0.5f;
            Faction    parentFaction = base.Map.ParentFaction;

            transition3.AddTrigger(new Trigger_PawnHarmed(chance, requireInstigatorWithFaction: false, parentFaction));
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2);
            Transition transition4 = new Transition(lordToil_DefendHiveAggressively, lordToil_AssaultColony);
            Transition transition5 = transition4;

            chance        = 0.5f;
            parentFaction = base.Map.ParentFaction;
            transition5.AddTrigger(new Trigger_PawnHarmed(chance, requireInstigatorWithFaction: false, parentFaction));
            transition4.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition4);
            Transition transition6 = new Transition(lordToil_DefendAndExpandHive, lordToil_DefendAndExpandHive, canMoveToSameState: true);

            transition6.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned));
            stateGraph.AddTransition(transition6);
            Transition transition7 = new Transition(lordToil_DefendHiveAggressively, lordToil_DefendHiveAggressively, canMoveToSameState: true);

            transition7.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned));
            stateGraph.AddTransition(transition7);
            Transition transition8 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive);

            transition8.AddSource(lordToil_DefendHiveAggressively);
            transition8.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, Hive.MemoAttackedByEnemy, Hive.MemoBurnedBadly, Hive.MemoDestroyedNonRoofCollapse, Hive.MemoDeSpawned, HediffGiver_Heat.MemoPawnBurnedByAir));
            transition8.AddPostAction(new TransitionAction_EndAttackBuildingJobs());
            stateGraph.AddTransition(transition8);
            return(stateGraph);
        }
コード例 #11
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_MechanoidsDefend(things, faction, defendRadius, defSpot, canAssaultColony, isMechCluster).CreateGraph()).StartingToil;
            Transition     transition   = new Transition(firstSource, startingToil);

            transition.AddTrigger(new Trigger_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.DormancyWakeup));
            transition.AddTrigger(new Trigger_OnHumanlikeHarmAnyThing(things));
            transition.AddPreAction(new TransitionAction_Message("MessageSleepingPawnsWokenUp".Translate(faction.def.pawnsPlural).CapitalizeFirst(), MessageTypeDefOf.ThreatBig));
            transition.AddPostAction(new TransitionAction_WakeAll());
            transition.AddPostAction(new TransitionAction_Custom((Action) delegate
            {
                Find.SignalManager.SendSignal(new Signal("CompCanBeDormant.WakeUp", things.First().Named("SUBJECT"), Faction.OfMechanoids.Named("FACTION")));
                SoundDefOf.MechanoidsWakeUp.PlayOneShot(new TargetInfo(defSpot, base.Map));
            }));
            stateGraph.AddTransition(transition);
            return(stateGraph);
        }
コード例 #12
0
        public override StateGraph CreateGraph()
        {
            StateGraph       stateGraph       = new StateGraph();
            LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(locomotion, canDig);

            lordToil_ExitMap.useAvoidGrid = true;
            stateGraph.AddToil(lordToil_ExitMap);
            if (canDefendSelf)
            {
                LordToil_ExitMapFighting lordToil_ExitMapFighting = new LordToil_ExitMapFighting(LocomotionUrgency.Jog, canDig);
                stateGraph.AddToil(lordToil_ExitMapFighting);
                Transition transition = new Transition(lordToil_ExitMap, lordToil_ExitMapFighting);
                transition.AddTrigger(new Trigger_PawnHarmed());
                transition.AddPostAction(new TransitionAction_WakeAll());
                transition.AddPostAction(new TransitionAction_EndAllJobs());
                stateGraph.AddTransition(transition);
            }
            return(stateGraph);
        }
コード例 #13
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();
            LordToil_DefendAndExpandHive lordToil_DefendAndExpandHive = new LordToil_DefendAndExpandHive();

            lordToil_DefendAndExpandHive.distToQueenToAttack = 16f;
            stateGraph.StartingToil = lordToil_DefendAndExpandHive;

            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony();

            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendAndExpandHive, lordToil_AssaultColony, false, true);

            transition.AddTrigger(new Trigger_Memo(Queen.MemoAttackedByEnemy));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition, false);

            LordToil_QueenKilled lordToil_QueenKilled = new LordToil_QueenKilled();

            stateGraph.AddToil(lordToil_QueenKilled);
            Transition transition2 = new Transition(lordToil_DefendAndExpandHive, lordToil_QueenKilled);

            transition2.AddTrigger(new Trigger_Memo(Queen.MemoDestroyedNonRoofCollapse));
            transition2.AddTrigger(new Trigger_Memo(Queen.MemoDeSpawned));
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2);

            LordToil_HiveDefense lordToil_HiveDefense = new LordToil_HiveDefense();

            stateGraph.AddToil(lordToil_HiveDefense);
            Transition transition3 = new Transition(lordToil_DefendAndExpandHive, lordToil_HiveDefense);

            transition3.AddTrigger(new Trigger_PawnHarmed(0.1f, false, Map.ParentFaction));
            transition3.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition3);

            Transition transition4 = new Transition(lordToil_HiveDefense, lordToil_DefendAndExpandHive);

            transition4.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[]
            {
                Insect.MemoAttackedByEnemy
            }));
            transition4.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition4);

            Transition transition5 = new Transition(lordToil_AssaultColony, lordToil_DefendAndExpandHive);

            transition5.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(7500, new string[]
            {
                Queen.MemoAttackedByEnemy
            }));
            transition5.AddPostAction(new TransitionAction_EndAttackBuildingJobs());
            stateGraph.AddTransition(transition5);
            return(stateGraph);
        }
コード例 #14
0
        public override StateGraph CreateGraph()
        {
            StateGraph      stateGraph      = new StateGraph();
            LordToil_Travel lordToil_Travel = new LordToil_Travel(this.groupUpLoc);

            lordToil_Travel.maxDanger     = Danger.Deadly;
            lordToil_Travel.avoidGridMode = AvoidGridMode.Smart;
            stateGraph.StartingToil       = lordToil_Travel;
            LordToil_PrisonerEscape lordToil_PrisonerEscape = new LordToil_PrisonerEscape(this.exitPoint, this.sapperThingID);

            lordToil_PrisonerEscape.avoidGridMode = AvoidGridMode.Smart;
            stateGraph.AddToil(lordToil_PrisonerEscape);
            LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, false);

            lordToil_ExitMap.avoidGridMode = AvoidGridMode.Smart;
            stateGraph.AddToil(lordToil_ExitMap);
            LordToil_ExitMap lordToil_ExitMap2 = new LordToil_ExitMap(LocomotionUrgency.Jog, true);

            stateGraph.AddToil(lordToil_ExitMap2);
            Transition transition = new Transition(lordToil_Travel, lordToil_ExitMap2);

            transition.AddSources(new LordToil[]
            {
                lordToil_PrisonerEscape,
                lordToil_ExitMap
            });
            transition.AddTrigger(new Trigger_PawnCannotReachMapEdge());
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_ExitMap2, lordToil_ExitMap);

            transition2.AddTrigger(new Trigger_PawnCanReachMapEdge());
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(lordToil_Travel, lordToil_PrisonerEscape);

            transition3.AddTrigger(new Trigger_Memo("TravelArrived"));
            stateGraph.AddTransition(transition3);
            Transition transition4 = new Transition(lordToil_Travel, lordToil_PrisonerEscape);

            transition4.AddTrigger(new Trigger_PawnLost());
            stateGraph.AddTransition(transition4);
            Transition transition5 = new Transition(lordToil_PrisonerEscape, lordToil_PrisonerEscape);

            transition5.canMoveToSameState = true;
            transition5.AddTrigger(new Trigger_PawnLost());
            transition5.AddTrigger(new Trigger_PawnHarmed(1f, false));
            stateGraph.AddTransition(transition5);
            Transition transition6 = new Transition(lordToil_PrisonerEscape, lordToil_ExitMap);

            transition6.AddTrigger(new Trigger_Memo("TravelArrived"));
            stateGraph.AddTransition(transition6);
            return(stateGraph);
        }
コード例 #15
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);
        }
コード例 #16
0
        // 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);
        }
コード例 #17
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_Custom((TriggerSignal signal) => signal.type == TriggerSignalType.DormancyWakeup));
            transition.AddPreAction(new TransitionAction_Message("MessageSleepingPawnsWokenUp".Translate(faction.def.pawnsPlural).CapitalizeFirst(), MessageTypeDefOf.ThreatBig));
            transition.AddPostAction(new TransitionAction_WakeAll());
            transition.AddPostAction(new TransitionAction_Custom((Action) delegate
            {
                Vector3 zero = Vector3.zero;
                for (int i = 0; i < lord.ownedPawns.Count; i++)
                {
                    zero += lord.ownedPawns[i].Position.ToVector3();
                }
                zero /= (float)lord.ownedPawns.Count;
                SoundDefOf.MechanoidsWakeUp.PlayOneShot(new TargetInfo(zero.ToIntVec3(), base.Map));
            }));
            stateGraph.AddTransition(transition);
            return(stateGraph);
        }
コード例 #18
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);
        }
コード例 #19
0
        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);
        }
コード例 #20
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);
        }
コード例 #21
0
        // Token: 0x0600079D RID: 1949 RVA: 0x0004323C File Offset: 0x0004163C
        public override StateGraph CreateGraph()
        {
            StateGraph             stateGraph          = new StateGraph();
            LordToil_DefendHiveLoc lordToil_DefendBase = new LordToil_DefendHiveLoc(this.baseCenter);

            stateGraph.StartingToil = lordToil_DefendBase;
            LordToil_DefendHiveLoc lordToil_DefendBase2 = new LordToil_DefendHiveLoc(this.baseCenter);

            stateGraph.AddToil(lordToil_DefendBase2);
            LordToil_XenomrophAssaultColony lordToil_AssaultColony = new LordToil_XenomrophAssaultColony(true);

            lordToil_AssaultColony.useAvoidGrid = true;
            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendBase, lordToil_DefendBase2, false, true);

            transition.AddSource(lordToil_AssaultColony);
            transition.AddTrigger(new Trigger_BecameNonHostileToPlayer());
            stateGraph.AddTransition(transition, false);
            Transition transition2 = new Transition(lordToil_DefendBase2, lordToil_DefendBase, false, true);

            transition2.AddTrigger(new Trigger_BecamePlayerEnemy());
            stateGraph.AddTransition(transition2, false);
            Transition transition3 = new Transition(lordToil_DefendBase, lordToil_AssaultColony, false, true);

            transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f));
            transition3.AddTrigger(new Trigger_PawnHarmed(0.4f, true)); //, null));
            //    transition3.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f));
            //    transition3.AddTrigger(new Trigger_TicksPassed(251999));
            transition3.AddTrigger(new Trigger_UrgentlyHungry());
            transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f));
            transition3.AddPostAction(new TransitionAction_WakeAll());
            string message = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst();

            transition3.AddPreAction(new TransitionAction_Message(message, MessageTypeDefOf.ThreatBig, null, 1f));
            stateGraph.AddTransition(transition3, false);

            Transition transition4 = new Transition(lordToil_AssaultColony, lordToil_DefendBase2, false, true);

            transition4.AddTrigger(new Trigger_ChanceOnTickInteval(2500, 0.03f));
            transition4.AddTrigger(new Trigger_TicksPassedWithoutHarm(9000));
            transition4.AddPostAction(new TransitionAction_EndAllJobs());
            string message2 = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst();

            transition4.AddPreAction(new TransitionAction_Message(message2, MessageTypeDefOf.NeutralEvent, null, 1f));
            stateGraph.AddTransition(transition4, false);
            return(stateGraph);
        }
コード例 #22
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);
        }
コード例 #23
0
        public override StateGraph CreateGraph()
        {
            StateGraph     stateGraph     = new StateGraph();
            LordToil_Sleep lordToil_Sleep = new LordToil_Sleep();

            stateGraph.StartingToil = lordToil_Sleep;
            LordToil   startingToil = stateGraph.AttachSubgraph(new LordJob_AssaultColony(this.faction, true, true, false, false, true).CreateGraph()).StartingToil;
            Transition transition   = new Transition(lordToil_Sleep, startingToil, false, true);

            transition.AddTrigger(new Trigger_PawnHarmed(1f, false, null));
            transition.AddPreAction(new TransitionAction_Message("MessageSleepingPawnsWokenUp".Translate(this.faction.def.pawnsPlural).CapitalizeFirst(), MessageTypeDefOf.ThreatBig, null, 1f));
            transition.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(transition, false);
            if (this.wakeUpIfColonistClose)
            {
                transition.AddTrigger(new Trigger_Custom((TriggerSignal x) => Find.TickManager.TicksGame % 30 == 0 && this.AnyColonistClose()));
            }
            return(stateGraph);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();

            LordToil_DefendBase lordToilDefendBase1 = new LordToil_DefendBase(this.baseCenter);

            stateGraph.StartingToil = lordToilDefendBase1;

            LordToil_DefendBase lordToilDefendBase2 = new LordToil_DefendBase(this.baseCenter);

            stateGraph.AddToil(lordToilDefendBase2);

            LordToil_AssaultColony toilAssaultColony = new LordToil_AssaultColony(true)
            {
                useAvoidGrid = true
            };

            stateGraph.AddToil(toilAssaultColony);

            Transition transition1 = new Transition(lordToilDefendBase1, lordToilDefendBase2);

            transition1.AddSource(toilAssaultColony);
            transition1.AddTrigger(new Trigger_BecameNonHostileToPlayer());
            stateGraph.AddTransition(transition1);

            Transition transition3 = new Transition(lordToilDefendBase1, toilAssaultColony);

            transition3.AddTrigger(new Trigger_FractionPawnsLost(0.2f));
            transition3.AddTrigger(new Trigger_PawnHarmed(0.4f));
            transition3.AddTrigger(new Trigger_ChanceOnTickInterval(2500, 0.03f));
            transition3.AddTrigger(new Trigger_TicksPassed(251999));
            transition3.AddTrigger(new Trigger_ChanceOnPlayerHarmNPCBuilding(0.4f));
            transition3.AddTrigger(new Trigger_OnClamor(ClamorDefOf.Ability));
            transition3.AddPostAction(new TransitionAction_WakeAll());
            TaggedString taggedString = "MessageDefendersAttacking".Translate(this.faction.def.pawnsPlural, this.faction.Name, Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst();

            transition3.AddPreAction(new TransitionAction_Message(taggedString, MessageTypeDefOf.ThreatBig));
            stateGraph.AddTransition(transition3);

            return(stateGraph);
        }
コード例 #27
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;
            int        tickLimit    = Rand.RangeSeeded(5000, 15000, this.raidSeed);
            Transition transition   = new Transition(lordToil_Stage, startingToil, false, true);

            transition.AddTrigger(new Trigger_TicksPassed(tickLimit));
            transition.AddTrigger(new Trigger_FractionPawnsLost(0.3f));
            transition.AddPreAction(new TransitionAction_Message("MessageRaidersBeginningAssault".Translate(new object[]
            {
                this.faction.def.pawnsPlural.CapitalizeFirst(),
                this.faction.Name
            }), MessageTypeDefOf.ThreatBig, "MessageRaidersBeginningAssault-" + this.raidSeed, 1f));
            transition.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(transition);
            return(stateGraph);
        }
コード例 #28
0
        public override StateGraph CreateGraph()
        {
            StateGraph     stateGraph     = new StateGraph();
            LordToil       startingToil   = stateGraph.AttachSubgraph(new LordJob_Travel(siegeSpot).CreateGraph()).StartingToil;
            LordToil_Siege lordToil_Siege = new LordToil_Siege(siegeSpot, blueprintPoints);

            stateGraph.AddToil(lordToil_Siege);
            LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.Jog, canDig: false, interruptCurrentJob: true)
            {
                useAvoidGrid = true
            };

            stateGraph.AddToil(lordToil_ExitMap);
            LordToil   startingToil2 = stateGraph.AttachSubgraph(new LordJob_AssaultColony(faction).CreateGraph()).StartingToil;
            Transition transition    = new Transition(startingToil, lordToil_Siege);

            transition.AddTrigger(new Trigger_Memo("TravelArrived"));
            transition.AddTrigger(new Trigger_TicksPassed(5000));
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_Siege, startingToil2);

            transition2.AddTrigger(new Trigger_Memo("NoBuilders"));
            transition2.AddTrigger(new Trigger_Memo("NoArtillery"));
            transition2.AddTrigger(new Trigger_PawnHarmed(0.08f));
            transition2.AddTrigger(new Trigger_FractionPawnsLost(0.3f));
            transition2.AddTrigger(new Trigger_TicksPassed((int)(60000f * Rand.Range(1.5f, 3f))));
            transition2.AddPreAction(new TransitionAction_Message("MessageSiegersAssaulting".Translate(faction.def.pawnsPlural, faction), MessageTypeDefOf.ThreatBig));
            transition2.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(lordToil_Siege, lordToil_ExitMap);

            transition3.AddSource(startingToil2);
            transition3.AddSource(startingToil);
            transition3.AddTrigger(new Trigger_BecameNonHostileToPlayer());
            transition3.AddPreAction(new TransitionAction_Message("MessageRaidersLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name)));
            stateGraph.AddTransition(transition3);
            return(stateGraph);
        }
コード例 #29
0
        public override StateGraph CreateGraph()
        {
            //TODO: This might use some love to expand the Job a bit. Pawn harmed for example. There are some triggers and states that weren't copied.
            StateGraph stateGraph = new StateGraph();
            LordToil_AmbroisaDefenseLGE lordToil_DefendAmbrosia = new LordToil_AmbroisaDefenseLGE();

            lordToil_DefendAmbrosia.distToHiveToAttack = 20f;
            stateGraph.StartingToil = lordToil_DefendAmbrosia;
            LordToil_AssaultColony lordToil_AssaultColony = new LordToil_AssaultColony();

            stateGraph.AddToil(lordToil_AssaultColony);
            Transition transition = new Transition(lordToil_DefendAmbrosia, lordToil_AssaultColony);

            transition.AddTrigger(new Trigger_PawnHarmed(0.5f, true));
            transition.AddTrigger(new Trigger_PawnLostViolently());
            transition.AddTrigger(new Trigger_Memo(Hive.MemoAttackedByEnemy));
            transition.AddTrigger(new Trigger_Memo(HediffGiver_Heat.MemoPawnBurnedByAir));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_DefendAmbrosia, lordToil_AssaultColony);

            transition2.canMoveToSameState = true;
            transition2.AddSource(lordToil_AssaultColony);
            transition2.AddTrigger(new Trigger_Memo(Hive.MemoDeSpawned));
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(lordToil_AssaultColony, lordToil_DefendAmbrosia);

            transition3.AddTrigger(new Trigger_TicksPassedWithoutHarmOrMemos(1200, new string[]
            {
                Hive.MemoAttackedByEnemy,
                HediffGiver_Heat.MemoPawnBurnedByAir
            }));
            transition3.AddPostAction(new TransitionAction_EndAttackBuildingJobs());
            stateGraph.AddTransition(transition3);
            return(stateGraph);
        }
コード例 #30
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph                 = new StateGraph();
            string     noFulfilledTradeMsg        = "IR.LordJobFulfillItemRequest.NoFulfillTrade".Translate();
            string     partiallyFulfilledTradeMsg = "IR.LordJobFulfillItemRequest.NoFulfillAllTrade".Translate();
            string     addedMessageText           = faction.RelationKindWith(playerFaction) == FactionRelationKind.Neutral ?
                                                    "IR.LordJobFulfillItemRequest.AttackingOutOfAnger".Translate() :
                                                    "IR.LordJobFulfillItemRequest.RelationsDropped".Translate();
            TransitionAction_Custom clearCaravanRequest = new TransitionAction_Custom(() => {
                Find.World.GetComponent <RequestSession>().CloseOpenDealWith(faction);
            });

            // ===================
            //       TOILS
            // ===================
            LordToil_Travel moving = new LordToil_Travel(chillSpot);

            stateGraph.StartingToil = moving;

            LordToil_DefendPoint defending = new LordToil_DefendTraderCaravan();

            stateGraph.AddToil(defending);

            LordToil_DefendPoint defendingChillPoint = new LordToil_DefendTraderCaravan(chillSpot, 40);

            stateGraph.AddToil(defendingChillPoint);

            LordToil_ExitMapAndEscortCarriers exitingAndEscorting = new LordToil_ExitMapAndEscortCarriers();

            stateGraph.AddToil(exitingAndEscorting);

            LordToil_ExitMap exiting = new LordToil_ExitMap();

            stateGraph.AddToil(exiting);

            LordToil_ExitMap urgentExiting = new LordToil_ExitMap(LocomotionUrgency.Walk, true);

            stateGraph.AddToil(urgentExiting);

            LordToil_ExitMapTraderFighting exitWhileFighting = new LordToil_ExitMapTraderFighting();

            stateGraph.AddToil(exitWhileFighting);

            // ===================
            //    TRANSITIONS
            // ===================
            Transition leaveIfDangerousTemp = new Transition(moving, exitingAndEscorting);

            leaveIfDangerousTemp.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint
            });
            leaveIfDangerousTemp.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures());
            leaveIfDangerousTemp.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name)));
            leaveIfDangerousTemp.AddPostAction(new TransitionAction_EndAllJobs());
            leaveIfDangerousTemp.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(leaveIfDangerousTemp);

            Transition leaveIfTrapped = new Transition(moving, urgentExiting);

            leaveIfTrapped.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint,
                exitingAndEscorting,
                exiting,
                exitWhileFighting
            });
            leaveIfTrapped.AddTrigger(new Trigger_PawnCannotReachMapEdge());
            leaveIfTrapped.AddPostAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(faction.def.pawnsPlural.CapitalizeFirst(), faction.Name)));
            leaveIfTrapped.AddPostAction(new TransitionAction_WakeAll());
            leaveIfTrapped.AddPostAction(new TransitionAction_EndAllJobs());
            leaveIfTrapped.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(leaveIfTrapped);

            Transition fightIfTrapped = new Transition(urgentExiting, exitWhileFighting);

            fightIfTrapped.AddTrigger(new Trigger_PawnCanReachMapEdge());
            fightIfTrapped.AddPostAction(new TransitionAction_EndAllJobs());
            fightIfTrapped.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(fightIfTrapped);

            Transition fightIfFractionPawnsLost = new Transition(moving, exitWhileFighting);

            fightIfFractionPawnsLost.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint,
                exitingAndEscorting,
                exiting
            });
            fightIfFractionPawnsLost.AddTrigger(new Trigger_FractionPawnsLost(0.2f));
            fightIfFractionPawnsLost.AddPostAction(new TransitionAction_EndAllJobs());
            fightIfFractionPawnsLost.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(fightIfFractionPawnsLost);

            Transition defendIfPawnHarmed = new Transition(moving, defending);

            defendIfPawnHarmed.AddTrigger(new Trigger_PawnHarmed());
            defendIfPawnHarmed.AddPreAction(new TransitionAction_SetDefendTrader());
            defendIfPawnHarmed.AddPostAction(new TransitionAction_WakeAll());
            defendIfPawnHarmed.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(defendIfPawnHarmed);

            Transition returnToNormalAfterTimePasses = new Transition(defending, moving);

            returnToNormalAfterTimePasses.AddTrigger(new Trigger_TicksPassedWithoutHarm(1200));
            stateGraph.AddTransition(returnToNormalAfterTimePasses);

            Transition stayPutAtSpot = new Transition(moving, defendingChillPoint);

            stayPutAtSpot.AddTrigger(new Trigger_Memo("TravelArrived"));
            stateGraph.AddTransition(stayPutAtSpot);

            Transition leaveIfRequestFulfilled = new Transition(moving, exitingAndEscorting);

            leaveIfRequestFulfilled.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint,
            });
            leaveIfRequestFulfilled.AddTrigger(new Trigger_Memo(MemoOnFulfilled));
            leaveIfRequestFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.RequestedCaravanLeaving".Translate(faction.Name)));
            leaveIfRequestFulfilled.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(leaveIfRequestFulfilled);


            int ticksUntilBadThings = Rand.Range(
                Mathf.RoundToInt(CaravanManager.fullDayInTicks / 2),                                   // 0.5  days
                CaravanManager.fullDayInTicks + Mathf.RoundToInt(CaravanManager.fullDayInTicks / 4));  // 1.25 days

            // Determine actions if request goes unfulfilled based on faction relation
            Trigger_TicksPassed      ticksPassed    = new Trigger_TicksPassed(ticksUntilBadThings);
            TransitionAction_Message actionMessage  = new TransitionAction_Message("IR.LordJobFulfillItemRequest.FactionInsulted".Translate(faction.Name) + "\n" + addedMessageText);
            TransitionAction_Message leavingMessage = new TransitionAction_Message("IR.LordJobFulfillItemRequest.RequestedCaravanLeaving".Translate(faction.Name));

            if (isFactionNeutral)
            {
                Action setFactionToHostile = () => faction.TrySetRelationKind(playerFaction, FactionRelationKind.Hostile, true, noFulfilledTradeMsg);

                Transition attackIfNotEnoughSilver = new Transition(moving, defending, true);
                attackIfNotEnoughSilver.AddSources(new LordToil[]
                {
                    defending,
                    defendingChillPoint,
                    exiting,
                    exitingAndEscorting
                });
                attackIfNotEnoughSilver.AddTrigger(new Trigger_Memo(MemoOnUnfulfilled));
                attackIfNotEnoughSilver.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.TradersAttacking".Translate(faction.Name)));
                attackIfNotEnoughSilver.AddPreAction(new TransitionAction_Custom(setFactionToHostile));
                attackIfNotEnoughSilver.AddPostAction(new TransitionAction_WakeAll());
                attackIfNotEnoughSilver.AddPostAction(new TransitionAction_SetDefendLocalGroup());
                stateGraph.AddTransition(attackIfNotEnoughSilver, true);

                Transition attackIfRequestUnfulfilled = new Transition(defendingChillPoint, defending);
                attackIfRequestUnfulfilled.AddTrigger(ticksPassed);
                attackIfRequestUnfulfilled.AddPreAction(actionMessage);
                attackIfRequestUnfulfilled.AddPreAction(new TransitionAction_Custom(setFactionToHostile));
                attackIfRequestUnfulfilled.AddPostAction(new TransitionAction_WakeAll());
                attackIfRequestUnfulfilled.AddPostAction(new TransitionAction_SetDefendLocalGroup());
                stateGraph.AddTransition(attackIfRequestUnfulfilled, true);

                Transition leaveAfterAttacking = new Transition(defendingChillPoint, exitingAndEscorting);
                leaveAfterAttacking.AddSource(defending);
                leaveAfterAttacking.AddTrigger(new Trigger_TicksPassed(ticksUntilBadThings + 10000));
                leaveAfterAttacking.AddPreAction(leavingMessage);
                leaveAfterAttacking.AddPostAction(new TransitionAction_EndAllJobs());
                stateGraph.AddTransition(leaveAfterAttacking);
            }
            else
            {
                Transition leaveIfRequestUnfulfilled = new Transition(moving, exitingAndEscorting);
                leaveIfRequestUnfulfilled.AddSources(new LordToil[]
                {
                    defending,
                    defendingChillPoint
                });
                leaveIfRequestUnfulfilled.AddTrigger(new Trigger_Memo(MemoOnUnfulfilled));
                leaveIfRequestUnfulfilled.AddTrigger(ticksPassed);
                leaveIfRequestUnfulfilled.AddPreAction(actionMessage);
                leaveIfRequestUnfulfilled.AddPreAction(new TransitionAction_Custom(() =>
                {
                    faction.TryAffectGoodwillWith(playerFaction, -30, true, false, noFulfilledTradeMsg);
                }));
                leaveIfRequestUnfulfilled.AddPostAction(leavingMessage);
                leaveIfRequestUnfulfilled.AddPostAction(new TransitionAction_WakeAll());
                stateGraph.AddTransition(leaveIfRequestUnfulfilled);
            }

            // Partial fulfillment
            Transition leaveIfRequestMostlyFulfilled = new Transition(moving, exiting);

            leaveIfRequestMostlyFulfilled.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint
            });
            leaveIfRequestMostlyFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_S));
            leaveIfRequestMostlyFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.DisappointedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput));
            leaveIfRequestMostlyFulfilled.AddPreAction(new TransitionAction_Custom(() =>
            {
                faction.TryAffectGoodwillWith(playerFaction, -5, true, false, partiallyFulfilledTradeMsg);
            }));
            leaveIfRequestMostlyFulfilled.AddPostAction(leavingMessage);
            leaveIfRequestMostlyFulfilled.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(leaveIfRequestMostlyFulfilled);


            Transition leaveIfRequestSomewhatFulfilled = new Transition(moving, exiting);

            leaveIfRequestSomewhatFulfilled.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint
            });
            leaveIfRequestSomewhatFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_M));
            leaveIfRequestSomewhatFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.AnnoyedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput));
            leaveIfRequestSomewhatFulfilled.AddPreAction(new TransitionAction_Custom(() =>
            {
                faction.TryAffectGoodwillWith(playerFaction, -10, true, false, partiallyFulfilledTradeMsg);
            }));
            leaveIfRequestSomewhatFulfilled.AddPostAction(leavingMessage);
            leaveIfRequestSomewhatFulfilled.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(leaveIfRequestSomewhatFulfilled);

            Transition leaveIfRequestHardlyFulfilled = new Transition(moving, exiting);

            leaveIfRequestHardlyFulfilled.AddSources(new LordToil[]
            {
                defending,
                defendingChillPoint
            });
            leaveIfRequestHardlyFulfilled.AddTrigger(new Trigger_Memo(MemoOnPartiallyFulfilled_L));
            leaveIfRequestHardlyFulfilled.AddPreAction(new TransitionAction_Message("IR.LordJobFulfillItemRequest.OutragedTraders".Translate(faction.Name), MessageTypeDefOf.CautionInput));
            leaveIfRequestHardlyFulfilled.AddPreAction(new TransitionAction_Custom(() =>
            {
                faction.TryAffectGoodwillWith(playerFaction, -20, true, false, partiallyFulfilledTradeMsg);
            }));
            leaveIfRequestHardlyFulfilled.AddPostAction(leavingMessage);
            leaveIfRequestHardlyFulfilled.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(leaveIfRequestHardlyFulfilled);

            Transition continueToLeaveMap = new Transition(exitingAndEscorting, exitingAndEscorting, true);

            continueToLeaveMap.AddTrigger(new Trigger_PawnLost());
            continueToLeaveMap.AddTrigger(new Trigger_TickCondition(() => LordToil_ExitMapAndEscortCarriers.IsAnyDefendingPosition(lord.ownedPawns) && !GenHostility.AnyHostileActiveThreatTo(Map, faction), 60));
            continueToLeaveMap.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(continueToLeaveMap);

            Transition finishLeavingMap = new Transition(exitingAndEscorting, exiting);

            finishLeavingMap.AddTrigger(new Trigger_TicksPassed(60000));
            finishLeavingMap.AddPostAction(new TransitionAction_WakeAll());
            finishLeavingMap.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(finishLeavingMap);

            Transition leaveIfBadThingsHappen = new Transition(defendingChillPoint, exitingAndEscorting);

            leaveIfBadThingsHappen.AddSources(new LordToil[]
            {
                moving,
                defending
            });
            leaveIfBadThingsHappen.AddTrigger(new Trigger_ImportantTraderCaravanPeopleLost());
            leaveIfBadThingsHappen.AddPostAction(new TransitionAction_WakeAll());
            leaveIfBadThingsHappen.AddPostAction(new TransitionAction_EndAllJobs());
            leaveIfBadThingsHappen.AddPostAction(clearCaravanRequest);
            stateGraph.AddTransition(leaveIfBadThingsHappen);

            return(stateGraph);
        }