Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph   = new StateGraph();
            LordToil   startingToil = stateGraph.AttachSubgraph(new LordJob_Travel(this.chillSpot).CreateGraph()).StartingToil;

            stateGraph.StartingToil = startingToil;
            var lordToil_WanderAndChat = IoM_StoryUtilities.GetWandererChatToil(this.chatType);

            stateGraph.AddToil(lordToil_WanderAndChat);
            LordToil_TakeWoundedGuest lordToil_TakeWoundedGuest = new LordToil_TakeWoundedGuest();

            stateGraph.AddToil(lordToil_TakeWoundedGuest);
            StateGraph           stateGraph2          = new LordJob_TravelAndExit(IntVec3.Invalid).CreateGraph();
            LordToil             startingToil2        = stateGraph.AttachSubgraph(stateGraph2).StartingToil;
            LordToil             target               = stateGraph2.lordToils[1];
            LordToil_ExitMapBest lordToil_ExitMapBest = new LordToil_ExitMapBest(LocomotionUrgency.Walk, true);

            stateGraph.AddToil(lordToil_ExitMapBest);
            Transition transition = new Transition(startingToil, lordToil_ExitMapBest);

            transition.AddSources(new LordToil[]
            {
                lordToil_WanderAndChat,
                lordToil_TakeWoundedGuest
            });
            transition.AddSources(stateGraph2.lordToils);
            transition.AddTrigger(new Trigger_PawnCannotReachMapEdge());
            string leavingMessage;

            if (this.isLonePawn)
            {
                leavingMessage = "MessageLoneWandererLeaving".Translate(new object[] { this.centralPawn.Name });
            }
            else
            {
                leavingMessage = "MessageGroupWandererLeaving".Translate();
            }

            transition.AddPreAction(new TransitionAction_Message(leavingMessage));
            stateGraph.AddTransition(transition);
            Transition transition2 = new Transition(lordToil_ExitMapBest, startingToil2);

            transition2.AddTrigger(new Trigger_PawnCanReachMapEdge());
            transition2.AddPreAction(new TransitionAction_EnsureHaveExitDestination());
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2);
            Transition transition3 = new Transition(startingToil, lordToil_WanderAndChat);

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

            transition4.AddTrigger(new Trigger_WoundedGuestPresent());

            stateGraph.AddTransition(transition4);
            Transition transition5 = new Transition(lordToil_WanderAndChat, target);

            transition5.AddSources(new LordToil[]
            {
                lordToil_TakeWoundedGuest,
                startingToil
            });
            transition5.AddTrigger(new Trigger_PawnLostViolently());
            transition5.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.SwitchToHostileFaction(); })));
            transition5.AddPreAction(new TransitionAction_WakeAll());
            transition5.AddPreAction(new TransitionAction_SetDefendLocalGroup());
            transition5.AddPreAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition5);
            Transition transition6 = new Transition(lordToil_WanderAndChat, startingToil2);

            transition6.AddTrigger(new Trigger_TicksPassed(Rand.Range(8000, 22000)));
            transition6.AddPreAction(new TransitionAction_Message(leavingMessage));
            transition6.AddPreAction(new TransitionAction_WakeAll());
            transition6.AddPreAction(new TransitionAction_EnsureHaveExitDestination());
            stateGraph.AddTransition(transition6);

            LordToil_AssaultColony lordtoilAssault = new LordToil_AssaultColony();

            stateGraph.AddToil(lordtoilAssault);
            lordtoilAssault.avoidGridMode = AvoidGridMode.Smart;
            Transition transition7 = new Transition(lordToil_WanderAndChat, lordtoilAssault);

            transition7.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.factionInt.SetHostileTo(Faction.OfPlayer, true); })));
            transition7.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.InquisitorFoundHeretic && IoM_StoryUtilities.InquisitorShouldStartDirectAttack(this.Map, this.centralPawn.GetLord().ownedPawns)));
            stateGraph.AddTransition(transition7);

            LordToil_PanicFlee lordToilFlee = new LordToil_PanicFlee();
            Transition         transition8  = new Transition(lordToil_WanderAndChat, lordToilFlee);

            transition8.AddPreAction(new TransitionAction_Custom(new Action(delegate { this.factionInt.SetHostileTo(Faction.OfPlayer, true); })));
            transition8.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.InquisitorFoundHeretic && !IoM_StoryUtilities.InquisitorShouldStartDirectAttack(this.Map, this.centralPawn.GetLord().ownedPawns)));
            stateGraph.AddTransition(transition8);
            return(stateGraph);
        }
Ejemplo n.º 3
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph    = new StateGraph();
            LordToil   lordToil_wait = new LordToil_DefendPoint(baseCenter, 50f);

            lordToil_wait.AddFailCondition(() => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead);
            stateGraph.AddToil(lordToil_wait);

            LordToil lordToil_leaveInShip = new LordToil_LeaveInShip();

            LordToil lordToil_leaveMap = new LordToil_ExitMapBest(LocomotionUrgency.Jog);

            Transition leaveMapEarly = new Transition(lordToil_leaveInShip, lordToil_leaveMap);

            leaveMapEarly.AddTrigger(new Trigger_Custom((TriggerSignal x) => ship.Destroyed || !ship.Spawned));

            stateGraph.AddTransition(leaveMapEarly);

            LordToil lordToil_main = new LordToil_ArrestGovernor();

            stateGraph.AddToil(lordToil_main);

            Transition governorDiedWaiting = new Transition(lordToil_wait, lordToil_leaveInShip);

            governorDiedWaiting.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead));

            stateGraph.AddTransition(governorDiedWaiting);

            Transition transition_fetchingGovernor = new Transition(lordToil_wait, lordToil_main);

            transition_fetchingGovernor.AddTrigger(new Trigger_TicksPassed(2500));
            transition_fetchingGovernor.AddPreAction(new TransitionAction_Message("MessageGovernorIsBeingArrested".Translate(new object[]
            {
                CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Name
            })));
            stateGraph.AddTransition(transition_fetchingGovernor);

            LordToil lordToil_goAggressive = new LordToil_AssaultColony();

            lordToil_goAggressive.avoidGridMode = AvoidGridMode.Smart;

            stateGraph.AddToil(lordToil_goAggressive);

            Transition transition_useForce = new Transition(lordToil_main, lordToil_goAggressive);

            transition_useForce.AddTrigger(new Trigger_BecameColonyEnemy());
            transition_useForce.AddTrigger(new Trigger_PawnHarmed());
            transition_useForce.AddPreAction(new TransitionAction_Message("MessageGovernorArrestGoneHostile".Translate()));

            transition_useForce.AddPreAction(new TransitionAction_Custom(new Action(delegate
            {
                this.lord.ownedPawns[0].Faction.SetHostileTo(Faction.OfPlayer, true);
            })));

            stateGraph.AddTransition(transition_useForce);

            Transition downedGovernor = new Transition(lordToil_goAggressive, lordToil_main);

            downedGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Downed));
            stateGraph.AddTransition(downedGovernor);

            Transition killedGovernor = new Transition(lordToil_goAggressive, lordToil_leaveInShip);

            killedGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor.Dead));
            stateGraph.AddTransition(killedGovernor);

            Transition transition_leaveWithGovernor = new Transition(lordToil_main, lordToil_leaveInShip);

            transition_leaveWithGovernor.AddTrigger(new Trigger_Custom((TriggerSignal x) => this.ship.GetInnerContainer().Contains(CorruptionStoryTrackerUtilities.currentStoryTracker.PlanetaryGovernor)));

            stateGraph.AddToil(lordToil_leaveInShip);
            stateGraph.AddTransition(transition_leaveWithGovernor);


            Transition transition_leaveUnderFire = new Transition(lordToil_main, lordToil_leaveInShip);

            transition_leaveUnderFire.AddPreAction(new TransitionAction_Custom(new Action(delegate
            {
                this.lord.ownedPawns[0].Faction.SetHostileTo(Faction.OfPlayer, true);
            })));

            stateGraph.AddToil(lordToil_leaveMap);
            LordToil_End lordToil_End = new LordToil_End();

            stateGraph.AddToil(lordToil_End);
            Transition endTransition = new Transition(lordToil_leaveMap, lordToil_End);

            endTransition.AddTrigger(new Trigger_TicksPassed(60000));
            stateGraph.AddTransition(endTransition);

            return(stateGraph);
        }