Пример #1
0
 public override AcceptanceReport CanAccept()
 {
     if (map != null && GenHostility.AnyHostileActiveThreatTo(map, dangerTo, countDormantPawnsAsHostile: true))
     {
         return(new AcceptanceReport("QuestRequiresNoDangerOnMap".Translate()));
     }
     return(true);
 }
Пример #2
0
        private bool TryToDefendClosestCarrier(Pawn p, float escortRadius)
        {
            Pawn  closestCarrier = this.GetClosestCarrier(p);
            Thing thing          = GenClosest.ClosestThingReachable(p.Position, p.Map, ThingRequest.ForGroup(ThingRequestGroup.Corpse), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 20f, delegate(Thing x)
            {
                Pawn innerPawn = ((Corpse)x).InnerPawn;
                return(innerPawn.Faction == p.Faction && innerPawn.RaceProps.packAnimal);
            }, null, 0, 15, false, RegionType.Set_Passable, false);
            Thing thing2 = GenClosest.ClosestThingReachable(p.Position, p.Map, ThingRequest.ForGroup(ThingRequestGroup.Pawn), PathEndMode.ClosestTouch, TraverseParms.For(p, Danger.Deadly, TraverseMode.ByPawn, false), 20f, delegate(Thing x)
            {
                Pawn pawn = (Pawn)x;
                return(pawn.Downed && pawn.Faction == p.Faction && pawn.GetTraderCaravanRole() == TraderCaravanRole.Carrier);
            }, null, 0, 15, false, RegionType.Set_Passable, false);
            Thing thing3 = null;

            if (closestCarrier != null)
            {
                thing3 = closestCarrier;
            }
            if (thing != null && (thing3 == null || thing.Position.DistanceToSquared(p.Position) < thing3.Position.DistanceToSquared(p.Position)))
            {
                thing3 = thing;
            }
            if (thing2 != null && (thing3 == null || thing2.Position.DistanceToSquared(p.Position) < thing3.Position.DistanceToSquared(p.Position)))
            {
                thing3 = thing2;
            }
            bool result;

            if (thing3 == null)
            {
                result = false;
            }
            else if (thing3 is Pawn && !((Pawn)thing3).Downed)
            {
                p.mindState.duty = new PawnDuty(DutyDefOf.Escort, thing3, escortRadius);
                result           = true;
            }
            else if (!GenHostility.AnyHostileActiveThreatTo(base.Map, this.lord.faction))
            {
                result = false;
            }
            else
            {
                p.mindState.duty = new PawnDuty(DutyDefOf.Defend, thing3.Position, 16f);
                result           = true;
            }
            return(result);
        }
Пример #3
0
 public static bool AnyHostileActiveThreatToPlayer(Map map)
 {
     return(GenHostility.AnyHostileActiveThreatTo(map, Faction.OfPlayer));
 }
        public override StateGraph CreateGraph()
        {
            StateGraph      stateGraph      = new StateGraph();
            LordToil_Travel lordToil_Travel = new LordToil_Travel(this.chillSpot);

            stateGraph.StartingToil = lordToil_Travel;
            LordToil_DefendTraderCaravan lordToil_DefendTraderCaravan = new LordToil_DefendTraderCaravan();

            stateGraph.AddToil(lordToil_DefendTraderCaravan);
            LordToil_DefendTraderCaravan lordToil_DefendTraderCaravan2 = new LordToil_DefendTraderCaravan(this.chillSpot);

            stateGraph.AddToil(lordToil_DefendTraderCaravan2);
            LordToil_ExitMapAndEscortCarriers lordToil_ExitMapAndEscortCarriers = new LordToil_ExitMapAndEscortCarriers();

            stateGraph.AddToil(lordToil_ExitMapAndEscortCarriers);
            LordToil_ExitMap lordToil_ExitMap = new LordToil_ExitMap(LocomotionUrgency.None, false);

            stateGraph.AddToil(lordToil_ExitMap);
            LordToil_ExitMap lordToil_ExitMap2 = new LordToil_ExitMap(LocomotionUrgency.Walk, true);

            stateGraph.AddToil(lordToil_ExitMap2);
            LordToil_ExitMapTraderFighting lordToil_ExitMapTraderFighting = new LordToil_ExitMapTraderFighting();

            stateGraph.AddToil(lordToil_ExitMapTraderFighting);
            Transition transition = new Transition(lordToil_Travel, lordToil_ExitMapAndEscortCarriers, false, true);

            transition.AddSources(new LordToil[]
            {
                lordToil_DefendTraderCaravan,
                lordToil_DefendTraderCaravan2
            });
            transition.AddPreAction(new TransitionAction_Message("MessageVisitorsDangerousTemperature".Translate(new object[]
            {
                this.faction.def.pawnsPlural.CapitalizeFirst(),
                this.faction.Name
            }), null, 1f));
            transition.AddPostAction(new TransitionAction_EndAllJobs());
            transition.AddTrigger(new Trigger_PawnExperiencingDangerousTemperatures());
            stateGraph.AddTransition(transition, false);
            Transition transition2 = new Transition(lordToil_Travel, lordToil_ExitMap2, false, true);

            transition2.AddSources(new LordToil[]
            {
                lordToil_DefendTraderCaravan,
                lordToil_DefendTraderCaravan2,
                lordToil_ExitMapAndEscortCarriers,
                lordToil_ExitMap,
                lordToil_ExitMapTraderFighting
            });
            transition2.AddTrigger(new Trigger_PawnCannotReachMapEdge());
            transition2.AddPostAction(new TransitionAction_Message("MessageVisitorsTrappedLeaving".Translate(new object[]
            {
                this.faction.def.pawnsPlural.CapitalizeFirst(),
                this.faction.Name
            }), null, 1f));
            transition2.AddPostAction(new TransitionAction_WakeAll());
            transition2.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition2, false);
            Transition transition3 = new Transition(lordToil_ExitMap2, lordToil_ExitMapTraderFighting, false, true);

            transition3.AddTrigger(new Trigger_PawnCanReachMapEdge());
            transition3.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition3, false);
            Transition transition4 = new Transition(lordToil_Travel, lordToil_ExitMapTraderFighting, false, true);

            transition4.AddSources(new LordToil[]
            {
                lordToil_DefendTraderCaravan,
                lordToil_DefendTraderCaravan2,
                lordToil_ExitMapAndEscortCarriers,
                lordToil_ExitMap
            });
            transition4.AddTrigger(new Trigger_FractionPawnsLost(0.2f));
            transition4.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition4, false);
            Transition transition5 = new Transition(lordToil_Travel, lordToil_DefendTraderCaravan, false, true);

            transition5.AddTrigger(new Trigger_PawnHarmed(1f, false, null));
            transition5.AddPreAction(new TransitionAction_SetDefendTrader());
            transition5.AddPostAction(new TransitionAction_WakeAll());
            transition5.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition5, false);
            Transition transition6 = new Transition(lordToil_DefendTraderCaravan, lordToil_Travel, false, true);

            transition6.AddTrigger(new Trigger_TicksPassedWithoutHarm(1200));
            stateGraph.AddTransition(transition6, false);
            Transition transition7 = new Transition(lordToil_Travel, lordToil_DefendTraderCaravan2, false, true);

            transition7.AddTrigger(new Trigger_Memo("TravelArrived"));
            stateGraph.AddTransition(transition7, false);
            Transition transition8 = new Transition(lordToil_DefendTraderCaravan2, lordToil_ExitMapAndEscortCarriers, false, true);

            transition8.AddTrigger(new Trigger_TicksPassed((!DebugSettings.instantVisitorsGift) ? Rand.Range(27000, 45000) : 0));
            transition8.AddPreAction(new TransitionAction_CheckGiveGift());
            transition8.AddPreAction(new TransitionAction_Message("MessageTraderCaravanLeaving".Translate(new object[]
            {
                this.faction.Name
            }), null, 1f));
            transition8.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(transition8, false);
            Transition transition9 = new Transition(lordToil_ExitMapAndEscortCarriers, lordToil_ExitMapAndEscortCarriers, true, true);

            transition9.canMoveToSameState = true;
            transition9.AddTrigger(new Trigger_PawnLost());
            transition9.AddTrigger(new Trigger_TickCondition(() => LordToil_ExitMapAndEscortCarriers.IsAnyDefendingPosition(this.lord.ownedPawns) && !GenHostility.AnyHostileActiveThreatTo(base.Map, this.faction), 60));
            stateGraph.AddTransition(transition9, false);
            Transition transition10 = new Transition(lordToil_ExitMapAndEscortCarriers, lordToil_ExitMap, false, true);

            transition10.AddTrigger(new Trigger_TicksPassed(60000));
            transition10.AddPostAction(new TransitionAction_WakeAll());
            stateGraph.AddTransition(transition10, false);
            Transition transition11 = new Transition(lordToil_DefendTraderCaravan2, lordToil_ExitMapAndEscortCarriers, false, true);

            transition11.AddSources(new LordToil[]
            {
                lordToil_Travel,
                lordToil_DefendTraderCaravan
            });
            transition11.AddTrigger(new Trigger_ImportantTraderCaravanPeopleLost());
            transition11.AddTrigger(new Trigger_BecamePlayerEnemy());
            transition11.AddPostAction(new TransitionAction_WakeAll());
            transition11.AddPostAction(new TransitionAction_EndAllJobs());
            stateGraph.AddTransition(transition11, false);
            return(stateGraph);
        }
 private bool <CreateGraph> m__0()
 {
     return(LordToil_ExitMapAndEscortCarriers.IsAnyDefendingPosition(this.lord.ownedPawns) && !GenHostility.AnyHostileActiveThreatTo(base.Map, this.faction));
 }