Example #1
0
        public static Job FeedJob(Pawn pawn)
        {
            Need_Blood blood = pawn.needs.TryGetNeed <Need_Blood>();

            if (blood == null)
            {
                return(null);
            }
            bool     desperate    = blood.CurCategory == HungerCategory.Starving;
            bool     isHuntHuman  = blood.preferredFeedMode == PreferredFeedMode.HumanoidLethal || blood.preferredFeedMode == PreferredFeedMode.HumanoidNonLethal;
            bool     isHuntLethal = blood.preferredFeedMode == PreferredFeedMode.HumanoidLethal || blood.preferredFeedMode == PreferredFeedMode.AnimalLethal;
            Thing    thing;
            ThingDef def;

            if (!BloodUtility.TryFindBestBloodSourceFor(pawn, pawn, desperate, out thing, out def))
            {
                return(null);
            }
            if (thing != null && thing != pawn && thing.Spawned)
            {
                Pawn pawn2 = thing as Pawn;
                if (pawn2 != null)
                {
                    return(new Job(VampDefOf.ROMV_Feed, pawn2)
                    {
                        killIncappedTarget = isHuntLethal
                    });
                }
                return(new Job(VampDefOf.ROMV_ConsumeBlood, thing)
                {
                    count = BloodUtility.WillConsumeStackCountOf(pawn, def)
                });
            }
            return(null);
        }
Example #2
0
        //private HungerCategory minCategory;

        //public override ThinkNode DeepCopy(bool resolve = true)
        //{
        //    JobGiver_GetBlood jobGiver_GetBlood = (JobGiver_GetBlood)base.DeepCopy(resolve);
        //    jobGiver_GetBlood.minCategory = this.minCategory;
        //    return jobGiver_GetBlood;
        //}

        public override float GetPriority(Pawn pawn)
        {
            if (pawn.VampComp() == null)
            {
                return(0f);
            }
            if (!pawn.VampComp().IsVampire)
            {
                return(0f);
            }
            Need_Blood blood = pawn.needs.TryGetNeed <Need_Blood>();

            if (blood == null)
            {
                return(0f);
            }
            if (blood.preferredFeedMode == PreferredFeedMode.None)
            {
                return(0f);
            }
            //HungerCategory.Starving && FoodUtility.ShouldBeFedBySomeone(pawn))
            //{
            //    return 0f;
            //}
            //if (blood.CurCategory < this.minCategory)
            //{
            //    return 0f;
            //}
            if (blood.CurLevelPercentage < blood.ShouldFeedPerc)
            {
                return(9.5f);
            }
            return(0f);
        }
        //private HungerCategory minCategory;

        //public override ThinkNode DeepCopy(bool resolve = true)
        //{
        //    JobGiver_GetBlood jobGiver_GetBlood = (JobGiver_GetBlood)base.DeepCopy(resolve);
        //    jobGiver_GetBlood.minCategory = this.minCategory;
        //    return jobGiver_GetBlood;
        //}

        public override float GetPriority(Pawn pawn)
        {
            //Log.Message("0");
            if (pawn.VampComp() == null)
            {
                //Log.Message("0a");
                return 0f;

            }
            if (!pawn.VampComp().IsVampire)
            {
                return 0f;
            }
            
            if (pawn.Drafted)
            {
                return 0f;
            }

            Need_Blood blood = pawn.needs.TryGetNeed<Need_Blood>();
            if (blood == null)
            {
                //Log.Message("0c");
                return 0f;

            }
            if (pawn.Faction == Faction.OfPlayer && blood.preferredFeedMode == PreferredFeedMode.None)
            {
                //Log.Message("0d");
                return 0f;
            }
            
            //HungerCategory.Starving && FoodUtility.ShouldBeFedBySomeone(pawn))
            //{
            //    return 0f;
            //}
            //if (blood.CurCategory < this.minCategory)
            //{
            //    return 0f;
            //}
            if (Find.World.GetComponent<WorldComponent_VampireTracker>().recentVampires?.ContainsKey(pawn) ?? false)
            {
                return 0f;
            }
            if (blood.CurLevelPercentage < blood.ShouldFeedPerc)
            {
                //Log.Message("0e");
                return 9.5f;
            }
                //Log.Message("0f");
            return 0f;
        }
        public static void DrawFeedModeButton(Vector2 pos, Pawn pawn)
        {
            Need_Blood vampBlood = pawn.needs.TryGetNeed <Need_Blood>();
            Texture2D  icon      = vampBlood.preferredFeedMode.GetIcon();
            Rect       rect      = new Rect(pos.x, pos.y, 24f, 24f);

            if (Widgets.ButtonImage(rect, icon))
            {
                vampBlood.preferredFeedMode = GetNextResponse(pawn);
                SoundDefOf.Tick_High.PlayOneShotOnCamera();
                PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.HostilityResponse, KnowledgeAmount.SpecificInteraction);
            }
            UIHighlighter.HighlightOpportunity(rect, "ROMV_FeedMode");
            TooltipHandler.TipRegion(rect, string.Concat(new string[]
            {
                "ROMV_FeedMode_Tip".Translate(),
                "\n\n",
                "ROMV_FeedMode_CurrentMode".Translate(),
                ": ",
                vampBlood.preferredFeedMode.GetLabel()
            }));
            if (vampBlood.preferredFeedMode > PreferredFeedMode.AnimalLethal)
            {
                Texture2D iconSub = vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? HumanoidTypeAll : HumanoidTypePrisonersOnly;
                Rect      rectSub = new Rect(pos.x, rect.yMax + 5f, 24f, 24f);

                if (Widgets.ButtonImage(rectSub, iconSub))
                {
                    if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All)
                    {
                        vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.PrisonersOnly;
                    }
                    else if (vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.PrisonersOnly)
                    {
                        vampBlood.preferredHumanoidFeedType = PreferredHumanoidFeedType.All;
                    }
                    SoundDefOf.Tick_High.PlayOneShotOnCamera();
                }
                UIHighlighter.HighlightOpportunity(rectSub, "ROMV_FeedModeHumanoidType");
                TooltipHandler.TipRegion(rectSub, string.Concat(new string[]
                {
                    "ROMV_FeedMode_CurrentType".Translate(),
                    ": ",
                    vampBlood.preferredHumanoidFeedType == PreferredHumanoidFeedType.All ? "ROMV_FeedMode_TypeAll".Translate() : "ROMV_FeedMode_TypePrisonersOnly".Translate()
                }));
            }
        }
Example #5
0
        //private HungerCategory minCategory;

        //public override ThinkNode DeepCopy(bool resolve = true)
        //{
        //    JobGiver_GetBlood jobGiver_GetBlood = (JobGiver_GetBlood)base.DeepCopy(resolve);
        //    jobGiver_GetBlood.minCategory = this.minCategory;
        //    return jobGiver_GetBlood;
        //}

        public override float GetPriority(Pawn pawn)
        {
            //Log.Message("0");
            if (pawn.VampComp() == null)
            {
                //Log.Message("0a");
                return(0f);
            }
            if (!pawn.VampComp().IsVampire)
            {
                return(0f);
            }

            if (pawn.Drafted)
            {
                return(0f);
            }

            Need_Blood blood = pawn.needs.TryGetNeed <Need_Blood>();

            if (blood == null)
            {
                //Log.Message("0c");
                return(0f);
            }
            if (pawn.Faction == Faction.OfPlayer && blood.preferredFeedMode == PreferredFeedMode.None)
            {
                //Log.Message("0d");
                return(0f);
            }
            if (Find.World.GetComponent <WorldComponent_VampireTracker>().recentVampires?.ContainsKey(pawn) ?? false)
            {
                return(0f);
            }
            if (blood.CurLevelPercentage < blood.ShouldFeedPerc)
            {
                return(9.5f);
            }
            return(0f);
        }
        public override float GetPriority(Pawn pawn)
        {
            //Log.Message("0");
            if (pawn.VampComp() == null)
            {
                //Log.Message("0a");
                return(0f);
            }
            if (!pawn.VampComp().IsVampire)
            {
                return(0f);
            }

            if (pawn.Drafted)
            {
                return(0f);
            }

            Need_Blood blood = pawn.needs.TryGetNeed <Need_Blood>();

            if (blood == null)
            {
                return(0f);
            }
            if (blood.CurLevelPercentage < blood.ShouldFeedPerc)
            {
                return(0f);
            }
            if (pawn.VampComp().Ghouls is List <Pawn> ghouls && !ghouls.NullOrEmpty() &&
                ghouls.Any(ghoul => ghoul?.VampComp()?.ThrallData?.ShouldFeedBlood ?? false))
            {
                return(9.5f);
            }
            //Log.Message("0f");
            return(0f);
        }