private static void Postfix(bool __result, InspirationHandler __instance, InspirationDef def, string reason = null)
 {
     if (__result)
     {
         VSIE_Utils.SocialInteractionsManager.TryRegisterNewIspiration(__instance.pawn, def);
     }
 }
 public static void RandomInspirationMtb_Postfix(InspirationHandler __instance)
 {
     if (__instance.pawn.IsHashIntervalTick(100))
     {
         CheckStartTrait_RandomInspiration(__instance);
     }
 }
Esempio n. 3
0
 public Pawn_MindState(Pawn pawn)
 {
     this.pawn = pawn;
     this.mentalStateHandler = new MentalStateHandler(pawn);
     this.mentalBreaker      = new MentalBreaker(pawn);
     this.inspirationHandler = new InspirationHandler(pawn);
     this.priorityWork       = new PriorityWork(pawn);
 }
        public static void Postfix(InspirationHandler __instance)
        {
            if (!__instance.pawn.IsFreeColonist)
            {
                return;
            }

            BCBManager.SetColonistBarDirty();
        }
Esempio n. 5
0
        private bool TryStartInspiration()
        {
            InspirationHandler ih = pawn.mindState.inspirationHandler;

            if (ih.Inspired || !pawn.health.capacities.CanBeAwake)
            {
                return(false);
            }
            return(ih.TryStartInspiration_NewTemp(InspirationDefOf.Inspired_Creativity, "LetterInspirationBeginThanksToHighMoodPart".Translate()));
        }
Esempio n. 6
0
        // inspiration function, see below
        public virtual float MTBDays(InspirationHandler ih)
        {
            float curLevel = ih.pawn.needs.mood.CurLevel;

            if (curLevel < inspirationMoodThreshold)
            {
                return(-1f);
            }
            return(GenMath.LerpDouble(inspirationMoodThreshold, 1f, 210f, 10f, curLevel) / inspirationChanceMultiplier);
        }
 public static void CheckStartTrait_RandomInspiration(InspirationHandler __instance)
 {
     if (!__instance.Inspired && __instance?.pawn?.story != null)
     {
         List <Trait> allTraits = __instance.pawn.story.traits.allTraits;
         for (int m = 0; m < allTraits.Count; m++)
         {
             RandomInspirationMtbDays currentData = allTraits[m].CurrentData as RandomInspirationMtbDays;
             if (currentData != null && currentData.randomInspirationMtbDays > 0f && Rand.MTBEventOccurs(currentData.randomInspirationMtbDays, 60000f, 100f))
             {
                 InspirationDef randomAvailableInspirationDef = GetRandomAvailableInspirationDef(__instance);
                 if (randomAvailableInspirationDef != null)
                 {
                     __instance.TryStartInspiration(randomAvailableInspirationDef);
                 }
             }
         }
     }
 }
Esempio n. 8
0
        // runs every 100 ticks, postfix to stub StartInspirationMTBDays patch
        public static void HandleInspirationMTB(ref float result, InspirationHandler ih)
        {
            if (interestList.inspirers.Count == 0)
            {
                return;
            }

            if (ih.pawn.needs.mood == null)             // result = -1, no mood value yet, so return
            {
                return;
            }

            // go through each skill this pawn has, see if they have an inspiring passion
            Pawn_SkillTracker pst = ih.pawn.skills;

            if (pst == null)
            {
                return;
            }
            if (pst.skills == null)
            {
                return;
            }

            // find any inspiring interests this pawn has and get their indices
            List <int> inspiringList = pst.skills.Select(s => (int)s.passion).Where(x => interestList[x].inspires).ToList();

            if (inspiringList.Count < 1)             // no pawn skill with inspiring passion
            {
                return;
            }

            InterestDef interest = getBestInspirer(inspiringList);

            result = interest.MTBDays(ih);
        }
 private static InspirationDef GetRandomAvailableInspirationDef(InspirationHandler __instance)
 {
     return((from x in DefDatabase <InspirationDef> .AllDefsListForReading
             where x.Worker.InspirationCanOccur(__instance.pawn) && (x != InspirationDefOf.Inspired_Surgery) && (x != SyrTraitDefOf.Frenzy_Shoot)
             select x).RandomElementByWeightWithFallback((InspirationDef x) => x.Worker.CommonalityFor(__instance.pawn), null));
 }
        // Token: 0x06000041 RID: 65 RVA: 0x00004144 File Offset: 0x00002344
        public static bool CompatPatch_InspirationHandlerTick(ref InspirationHandler __instance)
        {
            bool flag = __instance.pawn.def.HasModExtension <MechanicalPawnProperties>();

            return(!flag);
        }
 private static void Postfix(ref float __result, InspirationHandler __instance)
 {
     InterestBase.HandleInspirationMTB(ref __result, __instance);
 }
 private static void Postfix(InspirationHandler __instance, Inspiration inspiration)
 {
     VSIE_Utils.SocialInteractionsManager.Notify_InspirationExpired(__instance.pawn, inspiration.def);
 }
Esempio n. 13
0
        public static void Postfix(ref float __result, ref InspirationHandler __instance)
        {
            int expo = __instance.pawn?.needs?.mood?.thoughts?.memories?.Memories?.FindAll(mem => mem is Thought_WishSucceed).Count ?? 0;

            __result *= Mathf.Pow(WishUtility.Def.inspirationMTBFactorPerWishSucceed, expo);
        }