Beispiel #1
0
 public static bool ShouldSendNotificationAbout(Pawn p)
 {
     if (Current.ProgramState != ProgramState.Playing)
     {
         return(false);
     }
     if (PawnGenerator.IsBeingGenerated(p))
     {
         return(false);
     }
     if (p.IsWorldPawn() && (!p.IsCaravanMember() || !p.GetCaravan().IsPlayerControlled) && !PawnUtility.IsTravelingInTransportPodWorldObject(p) && p.Corpse.DestroyedOrNull())
     {
         return(false);
     }
     if (p.Faction != Faction.OfPlayer)
     {
         if (p.HostFaction != Faction.OfPlayer)
         {
             return(false);
         }
         if (p.RaceProps.Humanlike && p.guest.Released && !p.Downed && !p.InBed())
         {
             return(false);
         }
         if (p.CurJob != null && p.CurJob.exitMapOnArrival && !PrisonBreakUtility.IsPrisonBreaking(p))
         {
             return(false);
         }
     }
     return(true);
 }
Beispiel #2
0
        public static bool HostileTo(this Thing t, Faction fac)
        {
            if (t.Destroyed)
            {
                return(false);
            }
            Pawn pawn = t as Pawn;

            if (pawn != null)
            {
                MentalState mentalState = pawn.MentalState;
                if (mentalState != null && mentalState.ForceHostileTo(fac))
                {
                    return(true);
                }
                if (GenHostility.IsPredatorHostileTo(pawn, fac))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac && PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac)
                {
                    return(false);
                }
                if (pawn.HostFaction != null && !pawn.HostFaction.HostileTo(fac) && !PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(false);
                }
            }
            return(t.Faction != null && t.Faction.HostileTo(fac));
        }
Beispiel #3
0
 public void Notify_MemberTookDamage(Pawn member, DamageInfo dinfo)
 {
     if (dinfo.Instigator != null)
     {
         Pawn pawn = dinfo.Instigator as Pawn;
         if (pawn != null && pawn.CurJob != null && pawn.CurJob.def == JobDefOf.PredatorHunt)
         {
             this.TookDamageFromPredator(pawn);
         }
         if (dinfo.Instigator.Faction != null && dinfo.Def.externalViolence && !this.HostileTo(dinfo.Instigator.Faction) && (!member.InMentalState || !member.MentalStateDef.IsAggro))
         {
             Pawn pawn2 = dinfo.Instigator as Pawn;
             if (pawn2 != null && pawn2.InMentalState && pawn2.MentalStateDef == MentalStateDefOf.Berserk)
             {
                 return;
             }
             if (dinfo.Instigator.Faction == Faction.OfPlayer && PrisonBreakUtility.IsPrisonBreaking(member))
             {
                 return;
             }
             float num            = (float)Mathf.Min(100, dinfo.Amount);
             float goodwillChange = (float)(-1.2999999523162842 * num);
             if (dinfo.Instigator.Faction == Faction.OfPlayer && this != Faction.OfPlayer)
             {
                 this.AffectGoodwillWith(dinfo.Instigator.Faction, goodwillChange);
             }
         }
     }
 }
        public static bool HostileTo(this Thing t, Faction fac)
        {
            if (t.Destroyed)
            {
                return(false);
            }
            if (fac == null)
            {
                return(false);
            }
            Pawn pawn = t as Pawn;

            if (pawn != null)
            {
                MentalState mentalState = pawn.MentalState;
                if (mentalState != null && mentalState.ForceHostileTo(fac))
                {
                    return(true);
                }
                if (IsPredatorHostileTo(pawn, fac))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac && PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac)
                {
                    return(false);
                }
                if (pawn.HostFaction != null && !pawn.HostFaction.HostileTo(fac) && !PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(false);
                }
                if (fac.IsPlayer && pawn.mindState.WillJoinColonyIfRescued)
                {
                    return(false);
                }
                if (fac.def.hostileToFactionlessHumanlikes && pawn.Faction == null && pawn.RaceProps.Humanlike)
                {
                    return(true);
                }
            }
            else if (t.Faction == null && t.TryGetComp <CompCauseGameCondition>() != null)
            {
                return(true);
            }
            if (t.Faction == null)
            {
                return(false);
            }
            return(t.Faction.HostileTo(fac));
        }
Beispiel #5
0
        public void Notify_MemberTookDamage(Pawn member, DamageInfo dinfo)
        {
            if (dinfo.Instigator == null)
            {
                return;
            }
            if (this.IsPlayer)
            {
                return;
            }
            Pawn pawn = dinfo.Instigator as Pawn;

            if (pawn != null && pawn.CurJob != null && pawn.CurJob.def == JobDefOf.PredatorHunt)
            {
                this.TookDamageFromPredator(pawn);
            }
            if (dinfo.Instigator.Faction == null || !dinfo.Def.ExternalViolenceFor(member) || this.HostileTo(dinfo.Instigator.Faction))
            {
                return;
            }
            if (member.InAggroMentalState)
            {
                return;
            }
            if (pawn != null && pawn.InMentalState && pawn.MentalStateDef == MentalStateDefOf.Berserk)
            {
                return;
            }
            if (member.InMentalState && member.MentalStateDef.IsExtreme && member.MentalStateDef.category == MentalStateCategory.Malicious && this.PlayerRelationKind == FactionRelationKind.Ally)
            {
                return;
            }
            if (dinfo.Instigator.Faction == Faction.OfPlayer && PrisonBreakUtility.IsPrisonBreaking(member))
            {
                return;
            }
            if (dinfo.Instigator.Faction == Faction.OfPlayer && !this.IsMutuallyHostileCrossfire(dinfo))
            {
                float   num            = Mathf.Min(100f, dinfo.Amount);
                int     num2           = (int)(-1.3f * num);
                Faction faction        = dinfo.Instigator.Faction;
                int     goodwillChange = num2;
                string  reason         = "GoodwillChangedReason_AttackedPawn".Translate(new object[]
                {
                    member.LabelShort
                });
                GlobalTargetInfo?lookTarget = new GlobalTargetInfo?(member);
                this.TryAffectGoodwillWith(faction, goodwillChange, true, true, reason, lookTarget);
            }
        }
Beispiel #6
0
 public static bool CanParticipateInPrisonBreak(Pawn pawn)
 {
     if (pawn.Downed)
     {
         return(false);
     }
     if (!pawn.IsPrisoner)
     {
         return(false);
     }
     if (PrisonBreakUtility.IsPrisonBreaking(pawn))
     {
         return(false);
     }
     return(true);
 }
Beispiel #7
0
        public static bool HostileTo(this Thing t, Faction fac)
        {
            if (t.Destroyed)
            {
                return(false);
            }
            Pawn pawn = t as Pawn;

            if (pawn != null)
            {
                MentalState mentalState = pawn.MentalState;
                if (mentalState != null && mentalState.ForceHostileTo(fac))
                {
                    return(true);
                }
                if (IsPredatorHostileTo(pawn, fac))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac && PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(true);
                }
                if (pawn.HostFaction == fac)
                {
                    return(false);
                }
                if (pawn.HostFaction != null && !pawn.HostFaction.HostileTo(fac) && !PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    return(false);
                }
                if (fac.IsPlayer && pawn.mindState.WillJoinColonyIfRescued)
                {
                    return(false);
                }
            }
            if (t.Faction == null)
            {
                return(false);
            }
            return(t.Faction.HostileTo(fac));
        }
Beispiel #8
0
        public static bool HostileTo(this Thing a, Thing b)
        {
            if (a.Destroyed || b.Destroyed || a == b)
            {
                return(false);
            }
            Pawn pawn  = a as Pawn;
            Pawn pawn2 = b as Pawn;

            return((pawn != null && pawn.MentalState != null && pawn.MentalState.ForceHostileTo(b)) || (pawn2 != null && pawn2.MentalState != null && pawn2.MentalState.ForceHostileTo(a)) || (pawn != null && pawn2 != null && (GenHostility.IsPredatorHostileTo(pawn, pawn2) || GenHostility.IsPredatorHostileTo(pawn2, pawn))) || ((a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction && (pawn == null || pawn.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn2)) || (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction && (pawn2 == null || pawn2.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn))) || ((a.Faction == null || pawn2 == null || pawn2.HostFaction != a.Faction) && (b.Faction == null || pawn == null || pawn.HostFaction != b.Faction) && (pawn == null || !pawn.IsPrisoner || pawn2 == null || !pawn2.IsPrisoner) && (pawn == null || pawn2 == null || ((!pawn.IsPrisoner || pawn.HostFaction != pawn2.HostFaction || PrisonBreakUtility.IsPrisonBreaking(pawn)) && (!pawn2.IsPrisoner || pawn2.HostFaction != pawn.HostFaction || PrisonBreakUtility.IsPrisonBreaking(pawn2)))) && (pawn == null || pawn2 == null || ((pawn.HostFaction == null || pawn2.Faction == null || pawn.HostFaction.HostileTo(pawn2.Faction) || PrisonBreakUtility.IsPrisonBreaking(pawn)) && (pawn2.HostFaction == null || pawn.Faction == null || pawn2.HostFaction.HostileTo(pawn.Faction) || PrisonBreakUtility.IsPrisonBreaking(pawn2)))) && (a.Faction == null || !a.Faction.IsPlayer || pawn2 == null || !pawn2.mindState.WillJoinColonyIfRescued) && (b.Faction == null || !b.Faction.IsPlayer || pawn == null || !pawn.mindState.WillJoinColonyIfRescued) && a.Faction != null && b.Faction != null && a.Faction.HostileTo(b.Faction)));
        }
 public static bool CanParticipateInPrisonBreak(Pawn pawn)
 {
     return(!pawn.Downed && pawn.IsPrisoner && !PrisonBreakUtility.IsPrisonBreaking(pawn));
 }
        public static bool HostileTo(this Thing a, Thing b)
        {
            if (a.Destroyed || b.Destroyed || a == b)
            {
                return(false);
            }
            if ((a.Faction == null && a.TryGetComp <CompCauseGameCondition>() != null) || (b.Faction == null && b.TryGetComp <CompCauseGameCondition>() != null))
            {
                return(true);
            }
            Pawn pawn  = a as Pawn;
            Pawn pawn2 = b as Pawn;

            if ((pawn != null && pawn.MentalState != null && pawn.MentalState.ForceHostileTo(b)) || (pawn2 != null && pawn2.MentalState != null && pawn2.MentalState.ForceHostileTo(a)))
            {
                return(true);
            }
            if (pawn != null && pawn2 != null && (IsPredatorHostileTo(pawn, pawn2) || IsPredatorHostileTo(pawn2, pawn)))
            {
                return(true);
            }
            if ((a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction && (pawn == null || pawn.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn2)) || (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction && (pawn2 == null || pawn2.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn)))
            {
                return(true);
            }
            if ((a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction) || (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction))
            {
                return(false);
            }
            if (pawn != null && pawn.IsPrisoner && pawn2 != null && pawn2.IsPrisoner)
            {
                return(false);
            }
            if (pawn != null && pawn2 != null && ((pawn.IsPrisoner && pawn.HostFaction == pawn2.HostFaction && !PrisonBreakUtility.IsPrisonBreaking(pawn)) || (pawn2.IsPrisoner && pawn2.HostFaction == pawn.HostFaction && !PrisonBreakUtility.IsPrisonBreaking(pawn2))))
            {
                return(false);
            }
            if (pawn != null && pawn2 != null && ((pawn.HostFaction != null && pawn2.Faction != null && !pawn.HostFaction.HostileTo(pawn2.Faction) && !PrisonBreakUtility.IsPrisonBreaking(pawn)) || (pawn2.HostFaction != null && pawn.Faction != null && !pawn2.HostFaction.HostileTo(pawn.Faction) && !PrisonBreakUtility.IsPrisonBreaking(pawn2))))
            {
                return(false);
            }
            if ((a.Faction != null && a.Faction.IsPlayer && pawn2 != null && pawn2.mindState.WillJoinColonyIfRescued) || (b.Faction != null && b.Faction.IsPlayer && pawn != null && pawn.mindState.WillJoinColonyIfRescued))
            {
                return(false);
            }
            if ((pawn != null && pawn.Faction == null && pawn.RaceProps.Humanlike && b.Faction != null && b.Faction.def.hostileToFactionlessHumanlikes) || (pawn2 != null && pawn2.Faction == null && pawn2.RaceProps.Humanlike && a.Faction != null && a.Faction.def.hostileToFactionlessHumanlikes))
            {
                return(true);
            }
            if (a.Faction == null || b.Faction == null)
            {
                return(false);
            }
            return(a.Faction.HostileTo(b.Faction));
        }
Beispiel #11
0
        public static bool HostileTo(this Thing a, Thing b)
        {
            if (!a.Destroyed && !b.Destroyed && a != b)
            {
                Pawn pawn  = a as Pawn;
                Pawn pawn2 = b as Pawn;
                if (pawn != null && pawn.MentalState != null && pawn.MentalState.ForceHostileTo(b))
                {
                    goto IL_0071;
                }
                if (pawn2 != null && pawn2.MentalState != null && pawn2.MentalState.ForceHostileTo(a))
                {
                    goto IL_0071;
                }
                if (pawn != null && pawn2 != null && (GenHostility.IsPredatorHostileTo(pawn, pawn2) || GenHostility.IsPredatorHostileTo(pawn2, pawn)))
                {
                    return(true);
                }
                if (a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction && (pawn == null || pawn.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn2))
                {
                    goto IL_0115;
                }
                if (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction && (pawn2 == null || pawn2.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn))
                {
                    goto IL_0115;
                }
                if (a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction)
                {
                    goto IL_015b;
                }
                if (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction)
                {
                    goto IL_015b;
                }
                if (pawn != null && pawn.IsPrisoner && pawn2 != null && pawn2.IsPrisoner)
                {
                    return(false);
                }
                if (pawn != null && pawn2 != null)
                {
                    if (pawn.IsPrisoner && pawn.HostFaction == pawn2.HostFaction && !PrisonBreakUtility.IsPrisonBreaking(pawn))
                    {
                        goto IL_01db;
                    }
                    if (pawn2.IsPrisoner && pawn2.HostFaction == pawn.HostFaction && !PrisonBreakUtility.IsPrisonBreaking(pawn2))
                    {
                        goto IL_01db;
                    }
                }
                if (pawn != null && pawn2 != null)
                {
                    if (pawn.HostFaction != null && pawn2.Faction != null && !pawn.HostFaction.HostileTo(pawn2.Faction) && !PrisonBreakUtility.IsPrisonBreaking(pawn))
                    {
                        goto IL_0257;
                    }
                    if (pawn2.HostFaction != null && pawn.Faction != null && !pawn2.HostFaction.HostileTo(pawn.Faction) && !PrisonBreakUtility.IsPrisonBreaking(pawn2))
                    {
                        goto IL_0257;
                    }
                }
                if (a.Faction != null && b.Faction != null)
                {
                    return(a.Faction.HostileTo(b.Faction));
                }
                return(false);
            }
            return(false);

IL_0257:
            return(false);

IL_0115:
            return(true);

IL_0071:
            return(true);

IL_015b:
            return(false);

IL_01db:
            return(false);
        }
Beispiel #12
0
 public void Notify_MemberTookDamage(Pawn member, DamageInfo dinfo)
 {
     if (dinfo.Instigator != null && !IsPlayer)
     {
         Pawn pawn = dinfo.Instigator as Pawn;
         if (pawn != null && pawn.CurJob != null && pawn.CurJob.def == JobDefOf.PredatorHunt)
         {
             TookDamageFromPredator(pawn);
         }
         if (dinfo.Instigator.Faction != null && dinfo.Def.ExternalViolenceFor(member) && !this.HostileTo(dinfo.Instigator.Faction) && !member.InAggroMentalState && (pawn == null || !pawn.InAggroMentalState) && (!member.InMentalState || !member.MentalStateDef.IsExtreme || member.MentalStateDef.category != MentalStateCategory.Malicious || PlayerRelationKind != FactionRelationKind.Ally) && (dinfo.Instigator.Faction != OfPlayer || (!PrisonBreakUtility.IsPrisonBreaking(member) && !member.IsQuestHelper())) && dinfo.Instigator.Faction == OfPlayer && !IsMutuallyHostileCrossfire(dinfo))
         {
             float num            = Mathf.Min(100f, dinfo.Amount);
             int   goodwillChange = (int)(-1.3f * num);
             TryAffectGoodwillWith(dinfo.Instigator.Faction, goodwillChange, canSendMessage: true, canSendHostilityLetter: true, "GoodwillChangedReason_AttackedPawn".Translate(member.LabelShort, member), member);
         }
     }
 }
Beispiel #13
0
        public static bool HostileTo(this Thing a, Thing b)
        {
            bool result;

            if (a.Destroyed || b.Destroyed || a == b)
            {
                result = false;
            }
            else
            {
                Pawn pawn  = a as Pawn;
                Pawn pawn2 = b as Pawn;
                result = ((pawn != null && pawn.MentalState != null && pawn.MentalState.ForceHostileTo(b)) || (pawn2 != null && pawn2.MentalState != null && pawn2.MentalState.ForceHostileTo(a)) || (pawn != null && pawn2 != null && (GenHostility.IsPredatorHostileTo(pawn, pawn2) || GenHostility.IsPredatorHostileTo(pawn2, pawn))) || ((a.Faction != null && pawn2 != null && pawn2.HostFaction == a.Faction && (pawn == null || pawn.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn2)) || (b.Faction != null && pawn != null && pawn.HostFaction == b.Faction && (pawn2 == null || pawn2.HostFaction == null) && PrisonBreakUtility.IsPrisonBreaking(pawn))) || ((a.Faction == null || pawn2 == null || pawn2.HostFaction != a.Faction) && (b.Faction == null || pawn == null || pawn.HostFaction != b.Faction) && (pawn == null || !pawn.IsPrisoner || pawn2 == null || !pawn2.IsPrisoner) && (pawn == null || pawn2 == null || ((!pawn.IsPrisoner || pawn.HostFaction != pawn2.HostFaction || PrisonBreakUtility.IsPrisonBreaking(pawn)) && (!pawn2.IsPrisoner || pawn2.HostFaction != pawn.HostFaction || PrisonBreakUtility.IsPrisonBreaking(pawn2)))) && (pawn == null || pawn2 == null || ((pawn.HostFaction == null || pawn2.Faction == null || pawn.HostFaction.HostileTo(pawn2.Faction) || PrisonBreakUtility.IsPrisonBreaking(pawn)) && (pawn2.HostFaction == null || pawn.Faction == null || pawn2.HostFaction.HostileTo(pawn.Faction) || PrisonBreakUtility.IsPrisonBreaking(pawn2)))) && a.Faction != null && b.Faction != null && a.Faction.HostileTo(b.Faction)));
            }
            return(result);
        }