Ejemplo n.º 1
0
        //public static void Tick_PostFix(Pawn __instance) {
        //    Tenant tenantComp = __instance.GetTenantComponent();
        //    if (tenantComp != null && tenantComp.IsTenant && __instance.IsColonist) {

        //    }
        //}
        public static void TickRare_PostFix(Pawn __instance)
        {
            if (__instance.IsColonist)
            {
                Tenant tenantComp = __instance.GetTenantComponent();
                if (tenantComp != null && tenantComp.IsTenant)
                {
                    //If a tenant has joined but has no contract.
                    if (!tenantComp.Contracted)
                    {
                        tenantComp.IsTenant = false;
                    }
                    //Tenant alone with no colonist
                    Pawn colonist = __instance.Map.mapPawns.FreeColonists.FirstOrDefault(x => x.GetTenantComponent().IsTenant == false);
                    if (colonist == null)
                    {
                        Events.ContractConclusion(__instance, true, 1f);
                        return;
                    }
                    //Tenant contract is out
                    if (Find.TickManager.TicksGame >= tenantComp.ContractEndTick)
                    {
                        Events.ContractConclusion(__instance, false);
                        return;
                    }

                    //If tenancy is to be terminated.
                    if (tenantComp.IsTerminated)
                    {
                        if (__instance.health.Downed)
                        {
                            Messages.Message("ContractTerminateFail".Translate(), MessageTypeDefOf.NeutralEvent);
                        }
                        else
                        {
                            Events.TenantCancelContract(__instance);
                            return;
                        }
                        tenantComp.IsTerminated = false;
                    }
                    ////Operations queue for tenancy rejected.
                    if (__instance.BillStack.Count > 0)
                    {
                        if ((__instance.BillStack.Bills.Where(x => x.recipe.isViolation == true).Count() > 0))
                        {
                            __instance.BillStack.Clear();
                            tenantComp.SurgeryQueue++;
                            if (tenantComp.SurgeryQueue < 2)
                            {
                                Messages.Message("TenantSurgeryWarning".Translate(__instance.Named("PAWN")), MessageTypeDefOf.NeutralEvent);
                            }
                            else
                            {
                                Messages.Message("TenantSurgeryLeave".Translate(__instance.Named("PAWN")), MessageTypeDefOf.NegativeEvent);
                                Events.TenantLeave(__instance);
                            }
                        }
                    }
                    //Tenancy tick per day
                    if (Find.TickManager.TicksGame % 60000 == 0)
                    {
                        if (tenantComp.Wanted)
                        {
                            if (!MapComponent_Tenants.GetComponent(__instance.Map).WantedTenants.Contains(__instance))
                            {
                                Events.TenantWanted(__instance);
                            }
                        }
                    }
                    //Tenancy tick 1/10 per day
                    if (Find.TickManager.TicksGame % 6000 == 0)
                    {
                        if (tenantComp.MoleMessage)
                        {
                            tenantComp.MoleMessage = false;
                            Messages.Message("TenantMoleMessage".Translate(), MessageTypeDefOf.NegativeEvent);
                        }
                        if (tenantComp.Mole && !tenantComp.MoleActivated)
                        {
                            if (Utility.CalculateMood(tenantComp) < 1 && tenantComp.NeutralMoodCount > 2)
                            {
                                Building building = __instance.Map.listerBuildings.allBuildingsColonist.FirstOrDefault(x => x.def.defName.Contains("commsconsole") || x.def.defName.Contains("CommsConsole"));
                                if (building != null)
                                {
                                    Job job = new Job(JobDefOf.JobUseCommsConsoleMole, building);
                                    __instance.jobs.TryTakeOrderedJob(job);
                                }
                            }
                        }
                        if (__instance.needs.mood.CurInstantLevel > 0.8f)
                        {
                            Events.TenantWantToJoin(__instance);
                        }

                        //Calculate mood
                        if (__instance.needs.mood.CurInstantLevel > 0.66f)
                        {
                            tenantComp.HappyMoodCount++;
                            tenantComp.RecentBadMoodsCount = 0;
                        }
                        else if (__instance.needs.mood.CurInstantLevel < __instance.mindState.mentalBreaker.BreakThresholdMinor)
                        {
                            tenantComp.SadMoodCount++;
                            tenantComp.RecentBadMoodsCount++;
                            if (tenantComp.RecentBadMoodsCount > 5)
                            {
                                Events.ContractConclusion(__instance, true);
                            }
                        }
                        else
                        {
                            tenantComp.NeutralMoodCount++;
                            tenantComp.RecentBadMoodsCount = 0;
                        }
                    }
                }
            }
        }