public static Pawn DetermineTeacher(Map map)
        {
            Pawn        result = null;
            List <Pawn> pawns  = IncidentWorker_LeaderElection.getAllColonists();
            List <Pawn> tpawns = new List <Pawn>();

            foreach (Pawn current in pawns)
            {
                Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));

                if (h1 != null || h2 != null || h3 != null || h4 != null)
                {
                    if (current.Map == map)
                    {
                        tpawns.Add(current);
                    }
                }
            }


            return(tpawns.RandomElement());
        }
        public override void Notify_PawnDied()
        {
            if (!isThisExpired())
            {
                Messages.Message("LeaderDied".Translate(new object[] { this.def.label, this.pawn.Name.ToStringFull }), MessageSound.Negative);
                foreach (Pawn p in IncidentWorker_LeaderElection.getAllColonists())
                {
                    int num2 = p.relations.OpinionOf(this.pawn);
                    if (num2 <= -20)
                    {
                        p.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderDiedRival"), this.pawn);
                    }
                    else
                    {
                        p.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderDied"), this.pawn);
                    }
                }
                if (Utility.isDictatorship)
                {
                    Find.WindowStack.Add(new Dialog_ChooseLeader());
                }
            }

            this.pawn.health.RemoveHediff(this);
        }
Beispiel #3
0
        protected virtual List <Pawn> getLeaders()
        {
            List <Pawn> pawns = new List <Pawn>();

            pawns.AddRange(IncidentWorker_LeaderElection.getAllColonists());
            List <Pawn> tpawns = new List <Pawn>();

            foreach (Pawn current in pawns)
            {
                Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));

                if (h1 != null || h2 != null || h3 != null || h4 != null)
                {
                }
                else
                {
                    tpawns.Add(current);
                }
            }
            foreach (Pawn current in tpawns)
            {
                pawns.Remove(current);
            }
            return(pawns);
        }
Beispiel #4
0
        public static void listPawns(int index, Building_TeachingSpot spot)
        {
            List <FloatMenuOption> list   = new List <FloatMenuOption>();
            List <Pawn>            tpawns = new List <Pawn>();

            foreach (Pawn current in IncidentWorker_LeaderElection.getAllColonists())
            {
                Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));

                if (h1 != null || h2 != null || h3 != null || h4 != null)
                {
                    if (!spot.teachers.Contains(current))
                    {
                        tpawns.Add(current);
                    }
                }
            }


            list.Add(new FloatMenuOption("-None-", delegate
            {
                spot.teachers[index] = null;
            }, MenuOptionPriority.Default, null, null, 0f, null, null));

            foreach (Pawn p in tpawns)
            {
                list.Add(new FloatMenuOption(p.Name.ToStringShort, delegate
                {
                    String report = "";
                    String skills = "";
                    bool hasSkill = TeachingUtility.leaderHasAnySkill(p, out report, out skills);
                    if (hasSkill)
                    {
                        spot.teachers[index] = p;
                        if (report != "")
                        {
                            Messages.Message(report, TargetInfo.Invalid, MessageSound.Standard);
                        }
                    }
                    else
                    {
                        spot.teachers[index] = null;
                        Messages.Message(report, TargetInfo.Invalid, MessageSound.RejectInput);
                    }
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
            }


            Find.WindowStack.Add(new FloatMenu(list));
        }
        public override void DoWindowContents(Rect inRect)
        {
            Text.Font = GameFont.Small;

            Listing_Standard listing_Standard = new Listing_Standard();

            listing_Standard.Begin(inRect);

            listing_Standard.Label("ChooseGov".Translate());

            String label = this.chosenLeadership.name;

            if (listing_Standard.ButtonText(label, null))
            {
                List <FloatMenuOption> list = new List <FloatMenuOption>();

                foreach (GovType gov in ColonyLeadership.govtypes)
                {
                    list.Add(new FloatMenuOption(gov.name, delegate
                    {
                        this.chosenLeadership = gov;
                    }, MenuOptionPriority.Default, delegate() { TooltipHandler.TipRegion(inRect, gov.desc); }, null, 0f, null, null));
                }
                Find.WindowStack.Add(new FloatMenu(list));
            }

            listing_Standard.Gap(24f);
            if (listing_Standard.ButtonText("OK".Translate(), null))
            {
                GameComponent_ColonyLeadership comp = Utility.getCLComp();
                if (comp != null)
                {
                    comp.chosenLeadership = this.chosenLeadership;
                }
                if (comp != null)
                {
                    comp.chosenGov = ColonyLeadership.govtypes.IndexOf(this.chosenLeadership);
                }
                Find.WindowStack.TryRemove(this, true);
                if (this.chosenLeadership.name == "Dictatorship".Translate())
                {
                    foreach (Pawn p in IncidentWorker_LeaderElection.getAllColonists())
                    {
                        LeaderWindow.purgeLeadership(p);
                    }

                    Find.WindowStack.Add(new Dialog_ChooseLeader());
                }
            }
            listing_Standard.End();
        }
        public static Pawn getMostHatedLeaderBy(Pawn pawn)
        {
            List <Pawn> pawns   = IncidentWorker_LeaderElection.getAllColonists();
            List <Pawn> tpawns2 = new List <Pawn>();

            foreach (Pawn current in pawns)
            {
                Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));
                if (h1 != null || h2 != null || h3 != null || h4 != null)
                {
                    tpawns2.Add(current);
                }
            }

            Pawn  temp        = null;
            float lastopinion = 100;

            foreach (Pawn p2 in tpawns2)
            {
                if (p2 != pawn)
                {
                    float opinion = pawn.relations.OpinionOf(p2);
                    if (opinion <= lastopinion)
                    {
                        lastopinion = opinion;
                        temp        = p2;
                    }
                }
            }

            if (temp != null)
            {
                if (pawn.relations.OpinionOf(temp) > -60f)
                {
                    temp = null;
                }
            }

            return(temp);
        }
Beispiel #7
0
        public override bool TryExecute(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            List <Pawn> pawns   = IncidentWorker_LeaderElection.getAllColonists();
            List <Pawn> tpawns2 = new List <Pawn>();

            foreach (Pawn current in pawns)
            {
                Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));
                if (h1 == null && h2 == null && h3 == null && h4 == null && current.Map == map)
                {
                    tpawns2.Add(current);
                }
            }
            Pawn pawn = tpawns2.RandomElement();

            if (pawn != null && !pawn.Downed && !pawn.Dead)
            {
                if (pawn.CurJob != null && pawn.jobs.curDriver.layingDown != LayingDownState.NotLaying)
                {
                    pawn.jobs.EndCurrentJob(JobCondition.InterruptForced, true);
                }
                pawn.mindState.mentalStateHandler.TryStartMentalState(DefDatabase <MentalStateDef> .GetNamed("Rebelling"), null, false, false, null);
                String s = "He";
                if (pawn.gender == Gender.Female)
                {
                    s = "She";
                }
                Find.LetterStack.ReceiveLetter("RebelLetter".Translate(), "RebelLetterDesc".Translate(new object[] { pawn.Name.ToStringShort }), LetterDefOf.BadUrgent, pawn, null);
                return(true);
            }

            return(false);
        }
        public Dialog_ChooseIgnored(Building_TeachingSpot spot)
        {
            this.forcePause              = true;
            this.doCloseX                = true;
            this.closeOnEscapeKey        = true;
            this.absorbInputAroundWindow = true;
            this.closeOnClickedOutside   = true;
            this.spot       = spot;
            this.ignoreTemp = IncidentWorker_LeaderElection.getAllColonists();


            foreach (Pawn p in this.ignoreTemp)
            {
                if (this.spot.ignored.Contains(p))
                {
                    tempPawnList.Add(new TempPawn(p, true));
                }
                else
                {
                    tempPawnList.Add(new TempPawn(p, false));
                }
            }
        }
Beispiel #9
0
        public float getSkillFactor(Pawn current)
        {
            HediffLeader h1    = (HediffLeader)current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
            HediffLeader h2    = (HediffLeader)current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
            HediffLeader h3    = (HediffLeader)current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
            HediffLeader h4    = (HediffLeader)current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));
            float        score = IncidentWorker_LeaderElection.getBotanistScore(current);

            if (h2 != null)
            {
                h1 = h2; score = IncidentWorker_LeaderElection.getWarriorScore(current);
            }
            if (h3 != null)
            {
                h1 = h3; score = IncidentWorker_LeaderElection.getCarpenterScore(current);
            }
            if (h4 != null)
            {
                h1 = h4; score = IncidentWorker_LeaderElection.getScientistScore(current);
            }

            return(((score / 20f) * 0.3f) + 1f);
        }
Beispiel #10
0
        public override void TickRare()
        {
            base.TickRare();

            if (Utility.isDemocracy)
            {
                if (allowedDays.Contains(GenLocalDate.DayOfSeason(Map)))
                {
                    if (allowElection && (Find.TickManager.TicksGame > lastElectionTick + GenDate.TicksPerDay) && Rand.MTBEventOccurs(0.03f, 60000f, 150f) && AcceptableMapConditionsToStartElection(Map))
                    {
                        List <Pawn> leaders   = getLeaders();
                        List <Pawn> pawnCount = new List <Pawn>();
                        bool        flag      = false;
                        pawnCount.AddRange(IncidentWorker_LeaderElection.getAllColonists());
                        if (leaders.NullOrEmpty())
                        {
                            flag = true;
                        }
                        if (leaders.Count <= 1 && pawnCount.Count >= 5)
                        {
                            flag = true;
                        }


                        List <Pawn> canBeVoted = new List <Pawn>();
                        canBeVoted.AddRange(IncidentWorker_LeaderElection.getAllColonists());
                        List <Pawn> tpawns2 = new List <Pawn>();
                        foreach (Pawn current in canBeVoted)
                        {
                            Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                            Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                            Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                            Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));
                            Hediff h5 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leaderExpired"));
                            if (h1 != null || h2 != null || h3 != null || h4 != null || h5 != null)
                            {
                                tpawns2.Add(current);
                            }
                            if (current.story.WorkTagIsDisabled(WorkTags.Social))
                            {
                                tpawns2.Add(current);
                            }
                        }
                        foreach (Pawn current in tpawns2)
                        {
                            canBeVoted.Remove(current);
                        }
                        if (canBeVoted.NullOrEmpty())
                        {
                            Messages.Message("ElectionFail_NoAbleLeader".Translate(), MessageSound.Negative);
                        }
                        else
                        {
                            if (flag)
                            {
                                TryStartGathering(Map);
                            }
                        }
                    }
                }
            }
        }
Beispiel #11
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.FailOnDestroyedOrNull(TargetIndex.A);
            this.FailOnDestroyedOrNull(TargetIndex.B);
            this.FailOnAggroMentalState(TargetIndex.A);
            if (base.CurJob.def == JobDefOf.Rescue)
            {
                this.FailOnNotDowned(TargetIndex.A);
            }
            this.FailOn(delegate
            {
                if (this.CurJob.def.makeTargetPrisoner)
                {
                    if (!this.DropBed.ForPrisoners)
                    {
                        return(true);
                    }
                }
                else if (this.DropBed.ForPrisoners != ((Pawn)((Thing)this.TargetA)).IsPrisoner)
                {
                    return(true);
                }
                return(false);
            });
            yield return(Toils_Reserve.Reserve(TargetIndex.A, 1));

            yield return(Toils_Reserve.Reserve(TargetIndex.B, this.DropBed.SleepingSlotsCount));

            yield return(Toils_Bed.ClaimBedIfNonMedical(TargetIndex.B, TargetIndex.A));

            this.globalFinishActions.Add(delegate
            {
                if (this.CurJob.def.makeTargetPrisoner && this.Takee.ownership.OwnedBed == this.DropBed && this.Takee.Position != RestUtility.GetBedSleepingSlotPosFor(this.Takee, this.DropBed))
                {
                    this.Takee.ownership.UnclaimBed();
                }
            });
            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A).FailOnDespawnedNullOrForbidden(TargetIndex.B).FailOnNonMedicalBedNotOwned(TargetIndex.B, TargetIndex.A).FailOn(() => this.CurJob.def == JobDefOf.Arrest && !this.Takee.CanBeArrested()).FailOn(() => !this.pawn.CanReach(this.DropBed, PathEndMode.OnCell, Danger.Deadly, false, TraverseMode.ByPawn)).FailOnSomeonePhysicallyInteracting(TargetIndex.A));

            yield return(new Toil
            {
                initAction = delegate
                {
                    if (this.CurJob.def.makeTargetPrisoner)
                    {
                        Pawn pawn = (Pawn)this.CurJob.targetA.Thing;
                        Lord lord = pawn.GetLord();
                        if (lord != null)
                        {
                            lord.Notify_PawnAttemptArrested(pawn);
                        }
                        GenClamor.DoClamor(pawn, 10f, ClamorType.Harm);

                        if (Rand.Value < 0.1f)
                        {
                            Messages.Message("MessageRefusedArrest".Translate(new object[]
                            {
                                pawn.LabelShort
                            }), pawn, MessageSound.SeriousAlert);

                            pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Berserk, null, false, false, null);
                            IncidentWorker_Rebellion.removeLeadership(pawn);
                            pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderArrested"));
                            this.pawn.mindState.mentalStateHandler.CurState.RecoverFromState();
                            Find.LetterStack.ReceiveLetter("LeaderEndLetter".Translate(), "LeaderEndLetterDesc".Translate(new object[] { pawn.Name.ToStringFull }), LetterDefOf.BadNonUrgent, pawn, null);
                            this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true);
                        }
                    }
                }
            });

            yield return(Toils_Haul.StartCarryThing(TargetIndex.A, false, false));

            yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.Touch));

            yield return(new Toil
            {
                initAction = delegate
                {
                    if (this.CurJob.def.makeTargetPrisoner)
                    {
                        this.pawn.mindState.mentalStateHandler.CurState.RecoverFromState();
                        IncidentWorker_Rebellion.removeLeadership(this.Takee);
                        this.Takee.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderArrested"));
                        Find.LetterStack.ReceiveLetter("LeaderEndLetterArrested".Translate(), "LeaderEndLetterDescArrested".Translate(new object[] { Takee.Name.ToStringFull }), LetterDefOf.BadNonUrgent, this.pawn, null);
                        foreach (Pawn p in IncidentWorker_LeaderElection.getAllColonists())
                        {
                            if (p != this.Takee)
                            {
                                p.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderArrestedColonist"), null);
                            }
                        }

                        if (this.Takee.guest.released)
                        {
                            this.Takee.guest.released = false;
                            this.Takee.guest.interactionMode = PrisonerInteractionModeDefOf.NoInteraction;
                        }
                        if (!this.Takee.IsPrisonerOfColony)
                        {
                            if (this.Takee.Faction != null)
                            {
                                this.Takee.Faction.Notify_MemberCaptured(this.Takee, this.pawn.Faction);
                            }
                            this.Takee.guest.SetGuestStatus(Faction.OfPlayer, true);
                            if (this.Takee.guest.IsPrisoner)
                            {
                                TaleRecorder.RecordTale(TaleDefOf.Captured, new object[]
                                {
                                    this.pawn,
                                    this.Takee
                                });
                                this.pawn.records.Increment(RecordDefOf.PeopleCaptured);
                            }
                        }
                    }
                    else if (this.Takee.Faction != Faction.OfPlayer && this.Takee.HostFaction != Faction.OfPlayer && this.Takee.guest != null)
                    {
                        this.Takee.guest.SetGuestStatus(Faction.OfPlayer, false);
                    }
                    if (this.Takee.playerSettings == null)
                    {
                        this.Takee.playerSettings = new Pawn_PlayerSettings(this.Takee);
                    }
                }
            });

            yield return(Toils_Reserve.Release(TargetIndex.B));

            yield return(new Toil
            {
                initAction = delegate
                {
                    IntVec3 position = this.DropBed.Position;
                    Thing thing;
                    this.pawn.carryTracker.TryDropCarriedThing(position, ThingPlaceMode.Direct, out thing, null);
                    if (!this.DropBed.Destroyed && (this.DropBed.owners.Contains(this.Takee) || (this.DropBed.Medical && this.DropBed.AnyUnoccupiedSleepingSlot) || this.Takee.ownership == null))
                    {
                        this.Takee.jobs.Notify_TuckedIntoBed(this.DropBed);
                        if (this.Takee.RaceProps.Humanlike && this.CurJob.def != JobDefOf.Arrest && !this.Takee.IsPrisonerOfColony)
                        {
                            this.Takee.relations.Notify_RescuedBy(this.pawn);
                        }
                    }
                    if (this.Takee.IsPrisonerOfColony)
                    {
                        LessonAutoActivator.TeachOpportunity(ConceptDefOf.PrisonerTab, this.Takee, OpportunityType.GoodToKnow);
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });
        }
Beispiel #12
0
        public override void DoWindowContents(Rect inRect)
        {
            Text.Font = GameFont.Small;
            bool flag = false;

            if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return)
            {
                flag = true;
                Event.current.Use();
            }
            Listing_Standard listing_Standard = new Listing_Standard();

            listing_Standard.Begin(inRect);

            listing_Standard.Label("ChooseLeader".Translate());
            String label = (this.chosenPawn == null ? "NoneL".Translate() : this.chosenPawn.Name.ToStringShort);

            if (listing_Standard.ButtonText(label, null))
            {
                List <FloatMenuOption> list    = new List <FloatMenuOption>();
                List <Pawn>            tpawns2 = new List <Pawn>();

                list.Add(new FloatMenuOption("-" + "NoneL".Translate() + "-", delegate
                {
                    this.chosenPawn = null;
                }, MenuOptionPriority.Default, null, null, 0f, null, null));

                foreach (Pawn current in IncidentWorker_LeaderElection.getAllColonists())
                {
                    Hediff h1 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader1"));
                    Hediff h2 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader2"));
                    Hediff h3 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader3"));
                    Hediff h4 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leader4"));
                    Hediff h5 = current.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("leaderExpired"));
                    if (h1 == null && h2 == null && h3 == null && h4 == null && h5 == null && !current.story.WorkTagIsDisabled(WorkTags.Social))
                    {
                        tpawns2.Add(current);
                    }
                }

                foreach (Pawn p in tpawns2)
                {
                    list.Add(new FloatMenuOption(p.Name.ToStringShort, delegate
                    {
                        this.chosenPawn = p;
                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                }
                if (list.Count() == 1)
                {
                    TooltipHandler.TipRegion(inRect, "ChooseLeader_NoAbleColonists".Translate());
                }

                Find.WindowStack.Add(new FloatMenu(list));
            }


            if (listing_Standard.ButtonText("OK".Translate(), null))
            {
                if (this.chosenPawn != null)
                {
                    String targetLeader = "";
                    Pawn   most = this.chosenPawn;
                    float  maxValue = new float[] { IncidentWorker_LeaderElection.getBotanistScore(most), IncidentWorker_LeaderElection.getWarriorScore(most), IncidentWorker_LeaderElection.getCarpenterScore(most), IncidentWorker_LeaderElection.getScientistScore(most) }.Max();
                    if (maxValue == IncidentWorker_LeaderElection.getBotanistScore(most))
                    {
                        targetLeader = "leader1";
                    }
                    if (maxValue == IncidentWorker_LeaderElection.getWarriorScore(most))
                    {
                        targetLeader = "leader2";
                    }
                    if (maxValue == IncidentWorker_LeaderElection.getCarpenterScore(most))
                    {
                        targetLeader = "leader3";
                    }
                    if (maxValue == IncidentWorker_LeaderElection.getScientistScore(most))
                    {
                        targetLeader = "leader4";
                    }
                    Hediff hediff = HediffMaker.MakeHediff(HediffDef.Named(targetLeader), most, null);
                    IncidentWorker_LeaderElection.doElect(most, hediff, true);
                }
                Find.WindowStack.TryRemove(this, true);
            }
            listing_Standard.End();
        }
Beispiel #13
0
        public override void NeedInterval()
        {
            if (ticks >= 5)
            {
                float totalOpinion = 0;
                int   totalPawns   = 0;
                foreach (Pawn p in IncidentWorker_LeaderElection.getAllColonists())
                {
                    if (p != this.pawn && !p.Dead)
                    {
                        totalOpinion += p.relations.OpinionOf(this.pawn);
                        totalPawns++;
                    }
                }
                float medium = (totalOpinion / totalPawns);

                this.opinion = medium;
                float newlevel = (Mathf.Clamp(medium, 0f, 100f) / 100f) * getSkillFactor(this.pawn);



                if (this.curLevelInt < newlevel)
                {
                    this.lastGainTick = Find.TickManager.TicksGame;
                }
                else if (this.curLevelInt > newlevel)
                {
                    this.lastLoseTick = Find.TickManager.TicksGame;
                }
                if (newlevel > 1f)
                {
                    newlevel = 1f;
                }
                this.curLevelInt = newlevel;;



                if (totalPawns == 0)
                {
                    this.curLevelInt = 0.5f * getSkillFactor(this.pawn);
                }
                ticks = 0;
                bool flag5 = false;
                if (!Utility.isDictatorship)
                {
                    if (!this.chosenToStay && opinion < -40 && opinion > -80)
                    {
                        if (Rand.MTBEventOccurs(1.25f, 60000f, 150f))
                        {
                            flag5 = true;
                            StringBuilder str = new StringBuilder();
                            String        s   = "she";
                            if (this.pawn.gender == Gender.Male)
                            {
                                s = "he";
                            }

                            String b = "her";
                            if (this.pawn.gender == Gender.Male)
                            {
                                b = "his";
                            }

                            str.AppendLine("UnpopularM".Translate(new object[] { this.pawn.Name.ToStringFull }));
                            str.AppendLine("");
                            str.AppendLine("ResignLetterText".Translate(new object[] { this.pawn.Name.ToStringFull }));
                            str.AppendLine("");
                            str.AppendLine("OnlyOnce".Translate());
                            Action removeLeader = delegate
                            {
                                Find.LetterStack.ReceiveLetter("LeaderEndLetter".Translate(), "LeaderEndLetterDesc".Translate(new object[] { pawn.Name.ToStringFull }), LetterDefOf.BadNonUrgent, this.pawn, null);
                                this.pawn.needs.mood.thoughts.memories.TryGainMemory(ThoughtDef.Named("LeaderEnd"));
                                IncidentWorker_Rebellion.removeLeadership(this.pawn);
                            };
                            Action keepLeader = delegate
                            {
                                this.chosenToStay = true;
                            };


                            Dialog_MessageBox window = new Dialog_MessageBox(str.ToString(), "Resign".Translate(), removeLeader, "DontTesign".Translate(), keepLeader, "ResignationProposal".Translate(), false);
                            Find.WindowStack.Add(window);
                        }
                    }

                    if (!flag5 && opinion < -60)
                    {
                        float mtb = 0.50f;
                        if (opinion < -70)
                        {
                            mtb = 0.35f;
                        }
                        if (opinion < -80)
                        {
                            mtb = 0.20f;
                        }
                        if (opinion < -90)
                        {
                            mtb = 0.10f;
                        }

                        if (Rand.MTBEventOccurs(mtb, 60000f, 150f))
                        {
                            bool flag = false;
                            foreach (Pawn pa in IncidentWorker_LeaderElection.getAllColonists())
                            {
                                if (pa != null && pa.MentalState != null && pa.MentalState.def == DefDatabase <MentalStateDef> .GetNamed("Rebelling"))
                                {
                                    flag = true;
                                }
                            }
                            if (!flag)
                            {
                                IncidentParms parms = StorytellerUtility.DefaultParmsNow(Find.Storyteller.def, IncidentDef.Named("RebellionL").category, (this.pawn.Map));
                                if (IncidentDef.Named("RebellionL").Worker.TryExecute(parms))
                                {
                                    String s = "her";
                                    if (this.pawn.gender == Gender.Male)
                                    {
                                        s = "his";
                                    }
                                    Find.LetterStack.ReceiveLetter("RebellionLetter".Translate(), "RebellionLetterDesc".Translate(new object[] { this.pawn.Name.ToStringFull }), LetterDefOf.BadNonUrgent, this.pawn, null);
                                }
                            }
                        }
                    }
                }
            }
            ticks++;
        }