protected override ThoughtState CurrentSocialStateInternal(Pawn pawn, Pawn other)
 {
     if (pawn != null && other != null)
     {
         if (!other.RaceProps.Humanlike || other.Dead)
         {
             return(false);
         }
         if (!RelationsUtility.PawnsKnowEachOther(pawn, other))
         {
             return(false);
         }
         if (pawn.RaceProps.Humanlike && other.RaceProps.Humanlike)
         {
             if (TM_Calc.IsMightUser(pawn) && !pawn.story.traits.HasTrait(TorannMagicDefOf.TM_BoundlessTD) && other.story.traits.HasTrait(TorannMagicDefOf.TM_BoundlessTD))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
        public override void GameConditionTick()
        {
            base.GameConditionTick();
            if (Find.TickManager.TicksGame % 60 == 0)
            {
                //Log.Message("wandering lich duration pct: " + (float)((float)this.TicksPassed / (float)this.Duration) + "  duration ticks: " + this.Duration);
                if (this.thing.DestroyedOrNull())
                {
                    this.End();
                }

                CompSkeletonLichController comp = thing.TryGetComp <CompSkeletonLichController>();
                if (this.nextEventTick <= Find.TickManager.TicksGame)
                {
                    if (comp != null && comp.tauntTarget == null)
                    {
                        this.nextEventTick = Find.TickManager.TicksGame + this.ticksBetweenEvents;
                        comp.raiseRadius   = this.areaRadius;
                        comp.tauntTarget   = TM_Calc.TryFindSafeCell(comp.ParentPawn, comp.ParentPawn.Position, 30, 1, 10);
                        if (comp.tauntTarget == null || comp.tauntTarget == default(IntVec3))
                        {
                            FindGoodCenterLocation();
                            comp.tauntTarget = this.centerLocation.ToIntVec3;
                        }
                        comp.geChance       = this.geChance;
                        comp.leChance       = this.leChance;
                        this.centerLocation = comp.tauntTarget.Cell.ToIntVec2;
                        ChangeDefendPoint(thing.Faction);
                    }
                }

                if (comp != null && comp.shouldAssault)
                {
                    comp.shouldAssault = false;
                    SendAssaultWave(comp.ParentPawn.Faction);
                }
            }
        }
Ejemplo n.º 3
0
 public static void Evaluate(CompAbilityUserMight casterComp, TMAbilityDef abilitydef, PawnAbility ability, MightPower power, out bool success)
 {
     success = false;
     if (casterComp.Stamina.CurLevel >= abilitydef.staminaCost && ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster           = casterComp.Pawn;
         LocalTargetInfo jobTarget        = TM_Calc.FindNearbyFighter(caster, (int)(abilitydef.MainVerb.range * 1.5f), false);
         float           distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
         if (distanceToTarget < (abilitydef.MainVerb.range * 1.5f) && jobTarget != null && jobTarget.Thing != null && jobTarget.Thing is Pawn)
         {
             Pawn targetPawn = jobTarget.Thing as Pawn;
             CompAbilityUserMight targetPawnComp = targetPawn.GetComp <CompAbilityUserMight>();
             if (targetPawn.CurJobDef.joyKind != null || targetPawn.CurJobDef == JobDefOf.Wait_Wander || targetPawn.CurJobDef == JobDefOf.GotoWander)
             {
                 if (targetPawn.IsColonist && targetPawnComp.MightUserLevel < casterComp.MightUserLevel && caster.relations.OpinionOf(targetPawn) >= 0)
                 {
                     Job job = ability.GetJob(AbilityContext.AI, jobTarget);
                     caster.jobs.TryTakeOrderedJob(job);
                     success = true;
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 public static void EvaluateMinSeverity(CompAbilityUserMagic casterComp, TMAbilityDef abilitydef, PawnAbility ability, MagicPower power, HediffDef hediffDef, float minSeverity, out bool success)
 {
     success = false;
     if (casterComp.Mana.CurLevel >= casterComp.ActualManaCost(abilitydef) && ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster    = casterComp.Pawn;
         LocalTargetInfo jobTarget = TM_Calc.FindNearbyInjuredPawn(caster, (int)(abilitydef.MainVerb.range * .9f), minSeverity);
         if (jobTarget != null)
         {
             float distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
             if (distanceToTarget < (abilitydef.MainVerb.range * .9f) && jobTarget.Thing != null && jobTarget.Thing is Pawn)
             {
                 Pawn targetPawn = jobTarget.Thing as Pawn;
                 if (targetPawn.health != null && targetPawn.health.hediffSet != null && !targetPawn.health.hediffSet.HasHediff(hediffDef, false))
                 {
                     Job job = ability.GetJob(AbilityContext.AI, jobTarget);
                     caster.jobs.TryTakeOrderedJob(job);
                     success = true;
                     TM_Action.TM_Toils.GotoAndWait(jobTarget.Thing as Pawn, caster, Mathf.RoundToInt(ability.Def.MainVerb.warmupTime * 60));
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
        protected override bool TryCastShot()
        {
            bool result = false;

            if (this.currentTarget != null && base.CasterPawn != null)
            {
                if (this.currentTarget.Thing != null && this.currentTarget.Thing is Pawn)
                {
                    Pawn victim = this.currentTarget.Thing as Pawn;
                    if (victim.Faction != null && victim.RaceProps.Humanlike && victim.story != null && victim.story.traits != null && !TM_Calc.IsUndeadNotVamp(victim))
                    {
                        int            traitsApplied = 0;
                        List <Apparel> apparel       = this.CasterPawn.apparel.WornApparel;
                        List <Trait>   orbTraits     = new List <Trait>();
                        orbTraits.Clear();
                        CompEnchantedItem itemComp = null;
                        if (apparel != null)
                        {
                            for (int i = 0; i < apparel.Count; i++)
                            {
                                Apparel item = apparel[i];
                                if (item != null && item.def == TorannMagicDefOf.TM_Artifact_OrbOfSouls_Full)
                                {
                                    itemComp = item.GetComp <CompEnchantedItem>();
                                    if (itemComp != null)
                                    {
                                        orbTraits = itemComp.SoulOrbTraits;
                                    }
                                }
                            }
                        }
                        if (orbTraits.Count > 0)
                        {
                            for (int i = 0; i < orbTraits.Count; i++)
                            {
                                bool conflicting = false;
                                for (int j = 0; j < victim.story.traits.allTraits.Count; j++)
                                {
                                    if (victim.story.traits.allTraits[j].def.ConflictsWith(orbTraits[i]))
                                    {
                                        conflicting = true;
                                    }
                                }

                                if (!conflicting)
                                {
                                    AddTrait(victim, orbTraits[i]);
                                    traitsApplied++;
                                }
                            }

                            if (traitsApplied > 0)
                            {
                                Effects(victim.Position);
                                result = true;
                            }
                            else
                            {
                                Messages.Message("TM_NoTraitsApplied".Translate(victim), MessageTypeDefOf.RejectInput);
                                result = false;
                            }
                        }
                        else
                        {
                            Log.Message("no traits found in orb - was this dev-mode generated?");
                            result = true; //destroy anyways
                        }
                    }
                    else
                    {
                        //invalid target
                        Messages.Message("TM_InvalidTarget".Translate(
                                             this.CasterPawn.LabelShort,
                                             this.verbProps.label
                                             ), MessageTypeDefOf.RejectInput);
                    }
                }
                else
                {
                    //invalid target
                    Messages.Message("TM_InvalidTarget".Translate(
                                         this.CasterPawn.LabelShort,
                                         this.verbProps.label
                                         ), MessageTypeDefOf.RejectInput);
                }
            }
            else
            {
                Log.Warning("failed to TryCastShot");
            }
            this.burstShotsLeft = 0;
            //this.ability.TicksUntilCasting = (int)base.UseAbilityProps.SecondsToRecharge * 60;
            PostCastShot(result);
            return(false);
        }
Ejemplo n.º 6
0
        protected override bool TryCastShot()
        {
            bool result = false;

            if (this.currentTarget != null && base.CasterPawn != null)
            {
                if (this.currentTarget.Thing != null && this.currentTarget.Thing is Pawn)
                {
                    Pawn victim = this.currentTarget.Thing as Pawn;
                    if (victim.Faction != null && victim.RaceProps.Humanlike && victim.story != null && victim.story.traits != null && victim.story.traits.allTraits.Count > 0 && !TM_Calc.IsUndead(victim))
                    {
                        if (Rand.Chance(TM_Calc.GetSpellSuccessChance(this.CasterPawn, victim, true)))
                        {
                            Thing orb = ThingMaker.MakeThing(TorannMagicDefOf.TM_Artifact_OrbOfSouls_Full, null);
                            GenPlace.TryPlaceThing(orb, this.CasterPawn.Position, this.CasterPawn.Map, ThingPlaceMode.Near);
                            CompEnchantedItem orbComp = orb.TryGetComp <CompEnchantedItem>();
                            if (victim.Faction == this.CasterPawn.Faction)
                            {
                                if (orbComp != null)
                                {
                                    orbComp.SoulOrbTraits = new List <Trait>();
                                    orbComp.SoulOrbTraits.Clear();
                                    List <Trait> allTraits  = victim.story.traits.allTraits;
                                    int          iterations = Mathf.Max(allTraits.Count, 1);
                                    for (int i = 0; i < iterations; i++)
                                    {
                                        Trait transferTrait = allTraits.RandomElement();
                                        orbComp.SoulOrbTraits.AddDistinct(transferTrait);
                                        RemoveTrait(victim, allTraits, transferTrait.def);
                                        result = true;
                                    }
                                    if (Rand.Chance(.6f))
                                    {
                                        victim.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Berserk);
                                    }
                                    else if (Rand.Chance(.2f))
                                    {
                                        victim.Kill(null, null);
                                    }
                                }
                                else
                                {
                                    Log.Message("no comp found for orb of souls");
                                }
                            }
                            else
                            {
                                if (orbComp != null)
                                {
                                    orbComp.SoulOrbTraits = new List <Trait>();
                                    orbComp.SoulOrbTraits.Clear();
                                    List <Trait> allTraits  = victim.story.traits.allTraits;
                                    int          iterations = Mathf.Max(allTraits.Count, 1);
                                    for (int i = 0; i < iterations; i++)
                                    {
                                        Trait transferTrait = allTraits.RandomElement();
                                        orbComp.SoulOrbTraits.AddDistinct(transferTrait);
                                        RemoveTrait(victim, allTraits, transferTrait.def);
                                        Effects(victim.Position);
                                        result = true;
                                    }
                                    if (result)
                                    {
                                        if (Rand.Chance(.15f))
                                        {
                                            victim.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Berserk);
                                            int relationChange = Rand.RangeInclusive(-30, -20);
                                            this.CasterPawn.Faction.TryAffectGoodwillWith(victim.Faction, relationChange, true, true, TorannMagicDefOf.TM_OffensiveMagic, null);
                                        }
                                        else
                                        {
                                            victim.Kill(null, null);
                                            int relationChange = Rand.RangeInclusive(-50, -30);
                                            this.CasterPawn.Faction.TryAffectGoodwillWith(victim.Faction, relationChange, true, true, TorannMagicDefOf.TM_OffensiveMagic, null);
                                        }
                                    }
                                }
                                else
                                {
                                    Log.Message("no comp found for orb of souls");
                                }
                            }
                        }
                        else
                        {
                            MoteMaker.ThrowText(victim.DrawPos, victim.Map, "TM_ResistedSpell".Translate(), -1);
                        }
                    }
                    else
                    {
                        //invalid target
                        Messages.Message("TM_InvalidTarget".Translate(
                                             this.CasterPawn.LabelShort,
                                             this.verbProps.label
                                             ), MessageTypeDefOf.RejectInput);
                    }
                }
                else
                {
                    //invalid target
                    Messages.Message("TM_InvalidTarget".Translate(
                                         this.CasterPawn.LabelShort,
                                         this.verbProps.label
                                         ), MessageTypeDefOf.RejectInput);
                }
            }
            else
            {
                Log.Warning("failed to TryCastShot");
            }
            this.burstShotsLeft = 0;
            //this.ability.TicksUntilCasting = (int)base.UseAbilityProps.SecondsToRecharge * 60;
            PostCastShot(result);
            return(false);
        }
Ejemplo n.º 7
0
        public override void DoWindowContents(Rect inRect)
        {
            int   num       = 0;
            float rowHeight = 28f;
            Rect  sRect     = new Rect(inRect.x, inRect.y, inRect.width - 36f, inRect.height + 296f + (TM_ClassUtility.CustomClasses().Count * 40));

            scrollPosition = GUI.BeginScrollView(inRect, scrollPosition, sRect, false, true);
            //GUI.BeginGroup(inRect);

            Text.Font = GameFont.Medium;
            float x          = Text.CalcSize("TM_ClassOptions".Translate()).x;
            Rect  headerRect = new Rect((inRect.width / 2f) - (x / 2), inRect.y, inRect.width, ClassOptionsWindow.HeaderSize);

            Widgets.Label(headerRect, "TM_ClassOptions".Translate());
            Text.Font = GameFont.Small;
            GUI.color = Color.yellow;
            x         = Text.CalcSize("TM_ClassWarning".Translate()).x;
            Rect warningRect = new Rect((inRect.width / 2f) - (x / 2), inRect.y + ClassOptionsWindow.HeaderSize + 4f, inRect.width, ClassOptionsWindow.TextSize);

            Widgets.Label(warningRect, "TM_ClassWarning".Translate());
            x = Text.CalcSize("TM_RequiresRestart".Translate()).x;
            Rect restartRect = new Rect((inRect.width / 2f) - (x / 2), inRect.y + ClassOptionsWindow.HeaderSize + ClassOptionsWindow.TextSize + 4f, inRect.width, ClassOptionsWindow.TextSize);

            Widgets.Label(restartRect, "TM_RequiresRestart".Translate());
            GUI.color = Color.white;
            Rect rect1 = new Rect(inRect);

            rect1.width /= 3f;
            num         += 3;
            GUI.color    = Color.magenta;
            Rect classRect = Controller.UIHelper.GetRowRect(rect1, rowHeight, num);

            Widgets.Label(classRect, "TM_EnabledMages".Translate());
            Rect classRectShiftRight = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);

            classRectShiftRight.x += classRect.width + 98f;
            GUI.color              = Color.green;
            Widgets.Label(classRectShiftRight, "TM_EnabledFighters".Translate());
            num++;
            GUI.color = Color.white;
            Rect slRect0 = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);

            slRect0.width = inRect.width / 2.2f;
            Settings.Instance.baseMageChance = Widgets.HorizontalSlider(slRect0, Settings.Instance.baseMageChance, 0f, 5f, false, "baseMageChance".Translate() + " " + Rarity(Settings.Instance.baseMageChance) + " " + TM_Calc.GetMagePrecurserChance().ToString("P1"), "0", "5", .01f);
            Rect slRect0ShiftRight = Controller.UIHelper.GetRowRect(slRect0, rowHeight, num);

            slRect0ShiftRight.x += slRect0.width + 20f;
            Settings.Instance.baseFighterChance = Widgets.HorizontalSlider(slRect0ShiftRight, Settings.Instance.baseFighterChance, 0f, 5f, false, "baseFighterChance".Translate() + " " + Rarity(Settings.Instance.baseFighterChance) + " " + TM_Calc.GetFighterPrecurserChance().ToString("P1"), "0", "5", .01f);
            num++;
            Rect slRect1 = Controller.UIHelper.GetRowRect(slRect0, rowHeight, num);

            Settings.Instance.advMageChance = Widgets.HorizontalSlider(slRect1, Settings.Instance.advMageChance, 0f, 2f, false, "advMageChance".Translate() + " " + Rarity(Settings.Instance.advMageChance) + " " + TM_Calc.GetMageSpawnChance().ToString("P1"), "0", "2", .01f);
            Rect slRect1ShiftRight = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);

            slRect1ShiftRight.x += slRect0.width + 20f;
            Settings.Instance.advFighterChance = Widgets.HorizontalSlider(slRect1ShiftRight, Settings.Instance.advFighterChance, 0f, 2f, false, "advFighterChance".Translate() + " " + Rarity(Settings.Instance.advFighterChance) + " " + TM_Calc.GetFighterSpawnChance().ToString("P1"), "0", "2", .01f);
            num++;
            Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
            num++;
            Rect rowRect0 = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect0, "TM_Wanderer".Translate(), ref Settings.Instance.Wanderer, false);
            Rect rowRect0ShiftRight = Controller.UIHelper.GetRowRect(rowRect0, rowHeight, num);

            rowRect0ShiftRight.x += rowRect0.width + 98f;
            Widgets.CheckboxLabeled(rowRect0ShiftRight, "TM_Wayfarer".Translate(), ref Settings.Instance.Wayfayer, false);
            num++;
            Rect rowRect = Controller.UIHelper.GetRowRect(rowRect0, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect, "TM_Arcanist".Translate(), ref Settings.Instance.Arcanist, false);
            Rect rowRectShiftRight = Controller.UIHelper.GetRowRect(rowRect, rowHeight, num);

            rowRectShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRectShiftRight, "TM_Gladiator".Translate(), ref Settings.Instance.Gladiator, false);
            num++;
            Rect rowRect1 = Controller.UIHelper.GetRowRect(rowRect, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect1, "TM_FireMage".Translate(), ref Settings.Instance.FireMage, false);
            Rect rowRect1ShiftRight = Controller.UIHelper.GetRowRect(rowRect1, rowHeight, num);

            rowRect1ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect1ShiftRight, "TM_Bladedancer".Translate(), ref Settings.Instance.Bladedancer, false);
            num++;
            Rect rowRect2 = Controller.UIHelper.GetRowRect(rowRect1, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect2, "TM_IceMage".Translate(), ref Settings.Instance.IceMage, false);
            Rect rowRect2ShiftRight = Controller.UIHelper.GetRowRect(rowRect2, rowHeight, num);

            rowRect2ShiftRight.x += rowRect1.width + 98f;
            Widgets.CheckboxLabeled(rowRect2ShiftRight, "TM_Sniper".Translate(), ref Settings.Instance.Sniper, false);
            num++;
            Rect rowRect3 = Controller.UIHelper.GetRowRect(rowRect2, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect3, "TM_LitMage".Translate(), ref Settings.Instance.LitMage, false);
            Rect rowRect3ShiftRight = Controller.UIHelper.GetRowRect(rowRect3, rowHeight, num);

            rowRect3ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect3ShiftRight, "TM_Ranger".Translate(), ref Settings.Instance.Ranger, false);
            num++;
            Rect rowRect4 = Controller.UIHelper.GetRowRect(rowRect3, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect4, "TM_Geomancer".Translate(), ref Settings.Instance.Geomancer, false);
            Rect rowRect4ShiftRight = Controller.UIHelper.GetRowRect(rowRect4, rowHeight, num);

            rowRect4ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect4ShiftRight, "TM_Faceless".Translate(), ref Settings.Instance.Faceless, false);
            num++;
            Rect rowRect5 = Controller.UIHelper.GetRowRect(rowRect4, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect5, "TM_Druid".Translate(), ref Settings.Instance.Druid, false);
            Rect rowRect5ShiftRight = Controller.UIHelper.GetRowRect(rowRect5, rowHeight, num);

            rowRect5ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect5ShiftRight, "TM_Psionic".Translate(), ref Settings.Instance.Psionic, false);
            num++;
            Rect rowRect6 = Controller.UIHelper.GetRowRect(rowRect5, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect6, "TM_Paladin".Translate(), ref Settings.Instance.Paladin, false);
            Rect rowRect6ShiftRight = Controller.UIHelper.GetRowRect(rowRect6, rowHeight, num);

            rowRect6ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect6ShiftRight, "TM_DeathKnight".Translate(), ref Settings.Instance.DeathKnight, false);
            num++;
            Rect rowRect7 = Controller.UIHelper.GetRowRect(rowRect6, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect7, "TM_Priest".Translate(), ref Settings.Instance.Priest, false);
            Rect rowRect7ShiftRight = Controller.UIHelper.GetRowRect(rowRect7, rowHeight, num);

            rowRect7ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect7ShiftRight, "TM_Monk".Translate(), ref Settings.Instance.Monk, false);
            num++;
            Rect rowRect8 = Controller.UIHelper.GetRowRect(rowRect7, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect8, "TM_Bard".Translate(), ref Settings.Instance.Bard, false);
            Rect rowRect8ShiftRight = Controller.UIHelper.GetRowRect(rowRect8, rowHeight, num);

            rowRect8ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect8ShiftRight, "TM_Commander".Translate(), ref Settings.Instance.Commander, false);
            num++;
            Rect rowRect9 = Controller.UIHelper.GetRowRect(rowRect8, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect9, "TM_Summoner".Translate(), ref Settings.Instance.Summoner, false);
            Rect rowRect9ShiftRight = Controller.UIHelper.GetRowRect(rowRect9, rowHeight, num);

            rowRect9ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect9ShiftRight, "TM_SuperSoldier".Translate(), ref Settings.Instance.SuperSoldier, false);
            num++;
            Rect rowRect10 = Controller.UIHelper.GetRowRect(rowRect9, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect10, "TM_Necromancer".Translate(), ref Settings.Instance.Necromancer, false);
            Rect rowRect10ShiftRight = Controller.UIHelper.GetRowRect(rowRect10, rowHeight, num);

            rowRect10ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect10ShiftRight, "TM_Shadow".Translate(), ref Settings.Instance.Shadow);
            num++;
            Rect rowRect11 = Controller.UIHelper.GetRowRect(rowRect10, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect11, "TM_Demonkin".Translate(), ref Settings.Instance.Demonkin, false);
            num++;
            Rect rowRect12 = Controller.UIHelper.GetRowRect(rowRect11, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect12, "TM_Technomancer".Translate(), ref Settings.Instance.Technomancer, false);
            num++;
            Rect rowRect13 = Controller.UIHelper.GetRowRect(rowRect12, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect13, "TM_BloodMage".Translate(), ref Settings.Instance.BloodMage, false);
            num++;
            Rect rowRect14 = Controller.UIHelper.GetRowRect(rowRect13, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect14, "TM_Enchanter".Translate(), ref Settings.Instance.Enchanter, false);
            num++;
            Rect rowRect15 = Controller.UIHelper.GetRowRect(rowRect14, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect15, "TM_Chronomancer".Translate(), ref Settings.Instance.Chronomancer, false);
            num++;
            Rect rowRect16 = Controller.UIHelper.GetRowRect(rowRect15, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect16, "TM_ChaosMage".Translate(), ref Settings.Instance.ChaosMage, false);
            num++;
            Rect rowRect17 = Controller.UIHelper.GetRowRect(rowRect16, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect17, "TM_Brightmage".Translate(), ref Settings.Instance.Brightmage, false);
            num++;
            Rect rowRect18 = Controller.UIHelper.GetRowRect(rowRect17, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect18, "TM_Shaman".Translate(), ref Settings.Instance.Shaman, false);
            num++;
            Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
            num++;
            Rect slRect2 = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);

            Settings.Instance.supportTraitChance = Widgets.HorizontalSlider(slRect2, Settings.Instance.supportTraitChance, 0f, 1f, false, "supportTraitChance".Translate() + " " + Settings.Instance.supportTraitChance.ToString("P1"), "0", "1", .01f);
            //Rect slRect2ShiftRight = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);
            num++;
            Rect rowRect19 = Controller.UIHelper.GetRowRect(rowRect18, rowHeight, num);;

            Widgets.CheckboxLabeled(rowRect19, "TM_ArcaneConduit".Translate(), ref Settings.Instance.ArcaneConduit, false);
            Rect rowRect19ShiftRight = Controller.UIHelper.GetRowRect(rowRect19, rowHeight, num);

            rowRect19ShiftRight.x += rowRect.width + 98f;
            Widgets.CheckboxLabeled(rowRect19ShiftRight, "TM_Boundless".Translate(), ref Settings.Instance.Boundless, false);
            num++;
            Rect rowRect20 = Controller.UIHelper.GetRowRect(rowRect19, rowHeight, num);;

            Widgets.CheckboxLabeled(rowRect20, "TM_ManaWell".Translate(), ref Settings.Instance.ManaWell, false);
            num++;
            Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
            num++;
            GUI.color = Color.cyan;
            Rect customRect = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num);

            Widgets.Label(customRect, "TM_CustomClasses".Translate());
            GUI.color = Color.white;
            num++;
            for (int i = 0; i < TM_ClassUtility.CustomClasses().Count; i++)
            {
                TMDefs.TM_CustomClass cClass = TM_ClassUtility.CustomClasses()[i];
                bool classEnabled            = Settings.Instance.CustomClass[cClass.classTrait.ToString()];
                if (cClass.classTrait == TorannMagicDefOf.TM_Brightmage)
                {
                    classEnabled = Settings.Instance.Brightmage;
                }
                if (cClass.classTrait == TorannMagicDefOf.TM_Shaman)
                {
                    classEnabled = Settings.Instance.Shaman;
                }
                if (cClass.classTrait == TorannMagicDefOf.TM_TheShadow)
                {
                    classEnabled = Settings.Instance.Shadow;
                }
                if (cClass.shouldShow)
                {
                    //if (cClass.isMage && cClass.isFighter)
                    //{
                    //    GUI.color = Color.yellow;
                    //}
                    //else if(cClass.isMage)
                    //{
                    //    GUI.color = Color.magenta;
                    //}
                    //else if(cClass.isFighter)
                    //{
                    //    GUI.color = Color.green;
                    //}
                    //else
                    //{
                    //    GUI.color = Color.gray;
                    //}
                    Rect customRect1 = Controller.UIHelper.GetRowRect(customRect, rowHeight, num);
                    Widgets.CheckboxLabeled(customRect1, cClass.classTrait.degreeDatas.FirstOrDefault().label, ref classEnabled, false);
                    num++;
                }
                if (classEnabled != Settings.Instance.CustomClass[cClass.classTrait.ToString()])
                {
                    Settings.Instance.CustomClass.Remove(cClass.classTrait.ToString());
                    Settings.Instance.CustomClass.Add(cClass.classTrait.ToString(), classEnabled);
                }
                //GUI.color = Color.white;
            }

            //GUI.EndGroup();
            GUI.EndScrollView();
        }
Ejemplo n.º 8
0
 public bool IsUndead(Pawn pawn) => TM_Calc.IsUndead(pawn);
Ejemplo n.º 9
0
        private static void DoBlink(Pawn caster, IntVec3 targetCell, Thing carriedThing)
        {
            JobDef          retainJobDef  = caster.CurJobDef;
            int             retainCount   = 1;
            LocalTargetInfo retainTargetA = caster.CurJob.targetA;

            if (retainTargetA.Thing != null && retainTargetA.Thing.stackCount != 1)
            {
                retainCount = retainTargetA.Thing.stackCount;
            }
            LocalTargetInfo retainTargetB = caster.CurJob.targetB;
            LocalTargetInfo retainTargetC = caster.CurJob.targetC;
            Pawn            p             = caster;
            Thing           cT            = carriedThing;

            if (cT != null && cT.stackCount != 1)
            {
                retainCount = cT.stackCount;
            }
            Map     map          = caster.Map;
            IntVec3 casterCell   = caster.Position;
            bool    selectCaster = false;

            if (Find.Selector.FirstSelectedObject == caster)
            {
                selectCaster = true;
            }
            try
            {
                ThingDef moteThrown = null;
                Vector3  moteVector = TM_Calc.GetVector(casterCell, targetCell);
                float    angle      = moteVector.ToAngleFlat();
                if (angle >= -135 && angle < -45) //north
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_North");
                }
                else if (angle >= 45 && angle < 135) //south
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_South");
                }
                else if (angle >= -45 && angle < 45) //east
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_East");
                }
                else //west
                {
                    moteThrown = ThingDef.Named("Mote_DWPhase_West");
                }
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .2f, .1f, .5f, 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                }
                TM_MoteMaker.ThrowGenericMote(moteThrown, caster.DrawPos, caster.Map, 1.4f, .1f, 0f, .4f, 0, 5f, (Quaternion.AngleAxis(90, Vector3.up) * moteVector).ToAngleFlat(), 0);
                bool drafted = caster.drafter.Drafted;
                caster.DeSpawn();
                GenSpawn.Spawn(p, targetCell, map);
                if (carriedThing != null)
                {
                    carriedThing.DeSpawn();
                    GenPlace.TryPlaceThing(cT, targetCell, map, ThingPlaceMode.Near);
                    //GenSpawn.Spawn(cT, targetCell, map);
                }
                if (selectCaster)
                {
                    Find.Selector.Select(caster, false, true);
                }
                for (int i = 0; i < 3; i++)
                {
                    TM_MoteMaker.ThrowGenericMote(ThingDefOf.Mote_Smoke, caster.DrawPos, caster.Map, Rand.Range(.6f, 1f), .4f, .1f, Rand.Range(.8f, 1.2f), 0, Rand.Range(2, 3), Rand.Range(-30, 30), 0);
                    //TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Casting, caster.DrawPos, caster.Map, Rand.Range(1.4f, 2f), .2f, .05f, Rand.Range(.4f, .6f), Rand.Range(-200, 200), 0, 0, 0);
                }
                Vector3 drawPos = caster.DrawPos + (-2 * moteVector);
                TM_MoteMaker.ThrowGenericMote(moteThrown, drawPos, caster.Map, 1.4f, .1f, .3f, 0f, 0, 8f, (Quaternion.AngleAxis(90, Vector3.up) * moteVector).ToAngleFlat(), 0);
                if (caster.drafter == null)
                {
                    caster.drafter = new Pawn_DraftController(caster);
                }

                if (drafted)
                {
                    caster.drafter.Drafted = true;
                }

                Job job = new Job(retainJobDef, retainTargetA, retainTargetB, retainTargetC)
                {
                    count = retainCount
                };
                //caster.jobs.TryTakeOrderedJob(job, JobTag.Misc);
                caster.jobs.StartJob(job);
            }
            catch
            {
                if (!caster.Spawned)
                {
                    GenSpawn.Spawn(p, casterCell, map);
                }
            }
        }
Ejemplo n.º 10
0
        public override void Init()
        {
            base.Init();
            if (this.SingleMap != null)
            {
                List <Thing> allThings = (from x in this.SingleMap.listerThings.AllThings
                                          where true
                                          select x).ToList <Thing>();

                List <Corpse> potentialCorpses = new List <Corpse>();
                potentialCorpses.Clear();
                potentialResurrection.Clear();

                for (int i = 0; i < allThings.Count; i++)
                {
                    Thing t = allThings[i];
                    if (t != null && t is Corpse)
                    {
                        Corpse c = t as Corpse;
                        if (c.InnerPawn.IsColonist && !c.IsDessicated())
                        {
                            potentialResurrection.Add(c);
                        }
                    }
                }

                if (Rand.Chance(.15f))
                {
                    Corpse          c    = this.potentialResurrection.RandomElement();
                    LocalTargetInfo targ = c;
                    TM_CopyAndLaunchProjectile.CopyAndLaunchThing(ThingDef.Named("Projectile_Resurrection"), c, targ, targ, ProjectileHitFlags.All);
                }

                for (int i = 0; i < this.SingleMap.mapPawns.FreeColonistsSpawned.Count; i++)
                {
                    Pawn p = this.SingleMap.mapPawns.FreeColonistsSpawned[i];
                    if (TM_Calc.IsPawnInjured(p, 0))
                    {
                        this.injuredPawns.AddDistinct(p);
                    }
                    List <Hediff> healthConditions = null;
                    healthConditions = TM_Calc.GetPawnAfflictions(p);
                    if (healthConditions != null && healthConditions.Count > 0)
                    {
                        bool treatableCondition = false;
                        for (int j = 0; j < healthConditions.Count; j++)
                        {
                            if (healthConditions[j].def.tendable)
                            {
                                treatableCondition = true;
                            }
                        }
                        if (treatableCondition)
                        {
                            diseasedPawns.AddDistinct(p);
                        }
                    }
                }

                for (int i = 0; i < injuredPawns.Count; i++)
                {
                    if (Rand.Chance(.6f))
                    {
                        HealthUtility.AdjustSeverity(injuredPawns[i], TorannMagicDefOf.TM_Regeneration_I, 2f);
                    }
                }

                for (int i = 0; i < injuredPawns.Count; i++)
                {
                    if (Rand.Chance(.7f))
                    {
                        HealthUtility.AdjustSeverity(injuredPawns[i], TorannMagicDefOf.TM_DiseaseImmunityHD, 2f);
                    }
                }
            }
        }
Ejemplo n.º 11
0
 public static void EvaluateMinRange(CompAbilityUserMagic casterComp, TMAbilityDef abilitydef, PawnAbility ability, MagicPower power, float minRange, out bool success)
 {
     success = false;
     if (casterComp.Mana.CurLevel >= casterComp.ActualManaCost(abilitydef) && ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster           = casterComp.Pawn;
         LocalTargetInfo jobTarget        = TM_Calc.FindNearbyEnemy(caster, (int)(abilitydef.MainVerb.range * .9f));
         float           distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
         if (distanceToTarget > minRange && distanceToTarget < (abilitydef.MainVerb.range * .9f) && jobTarget != null && jobTarget.Thing != null && TM_Calc.HasLoSFromTo(caster.Position, jobTarget, caster, 0, abilitydef.MainVerb.range))
         {
             Job job = ability.GetJob(AbilityContext.AI, jobTarget);
             job.endIfCantShootTargetFromCurPos = true;
             caster.jobs.TryTakeOrderedJob(job);
             success = true;
         }
     }
 }
Ejemplo n.º 12
0
 public static void EvaluateMinRange(CompAbilityUserMight casterComp, TMAbilityDef abilitydef, PawnAbility ability, MightPower power, float minRange, out bool success)
 {
     success = false;
     if (casterComp.Stamina.CurLevel >= abilitydef.staminaCost && ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster    = casterComp.Pawn;
         LocalTargetInfo jobTarget = TM_Calc.FindNearbyEnemy(caster, (int)(abilitydef.MainVerb.range * .9f));
         if (jobTarget != null && jobTarget.Thing != null && abilitydef == TorannMagicDefOf.TM_AntiArmor)
         {
             Pawn targetPawn = jobTarget.Thing as Pawn;
             if (targetPawn.RaceProps.IsFlesh)
             {
                 jobTarget = null;
             }
         }
         float distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
         if (jobTarget != null && jobTarget.Thing != null && (distanceToTarget > minRange && distanceToTarget < (abilitydef.MainVerb.range * .9f)) && TM_Calc.HasLoSFromTo(caster.Position, jobTarget, caster, 0, abilitydef.MainVerb.range))
         {
             Job job = ability.GetJob(AbilityContext.AI, jobTarget);
             job.endIfCantShootTargetFromCurPos = true;
             caster.jobs.TryTakeOrderedJob(job);
             success = true;
         }
     }
 }
Ejemplo n.º 13
0
 public static void TryExecute(CompAbilityUserMight casterComp, TMAbilityDef abilitydef, PawnAbility ability, MightPower power, LocalTargetInfo target, int minRange, out bool success)
 {
     success = false;
     if (casterComp.Stamina.CurLevel >= abilitydef.staminaCost && ability.CooldownTicksLeft <= 0)
     {
         Pawn            caster           = casterComp.Pawn;
         LocalTargetInfo jobTarget        = target;
         float           distanceToTarget = (jobTarget.Cell - caster.Position).LengthHorizontal;
         if (distanceToTarget > minRange && distanceToTarget < (abilitydef.MainVerb.range * .9f) && jobTarget != null && jobTarget.Thing != null && TM_Calc.HasLoSFromTo(caster.Position, jobTarget, caster, 0, abilitydef.MainVerb.range))
         {
             Job job = ability.GetJob(AbilityContext.AI, jobTarget);
             job.endIfCantShootTargetFromCurPos = true;
             caster.jobs.TryTakeOrderedJob(job);
             success = true;
         }
     }
 }
Ejemplo n.º 14
0
        private void DoSummoningCircle()
        {
            if (Find.TickManager.TicksGame % 2 == 0)
            {
                IntVec3 randomCircleCell = this.summoningCircle.RandomElement();
                TM_MoteMaker.ThrowGenericMote(ThingDef.Named("Mote_Demon_Flame"), randomCircleCell.ToVector3Shifted(), this.SingleMap, Rand.Range(.5f, .9f), Rand.Range(.2f, .3f), .05f, Rand.Range(.2f, .4f), Rand.Range(-400, 400), Rand.Range(.8f, 1.2f) * (randomCircleCell - this.centerLocation.ToIntVec3).LengthHorizontal, (Quaternion.AngleAxis(90, Vector3.up) * TM_Calc.GetVector(randomCircleCell.ToVector3Shifted(), this.centerLocation.ToIntVec3.ToVector3Shifted())).ToAngleFlat(), Rand.Range(0, 359));
            }

            if (this.nextBlackLightning > this.summoningDuration)
            {
                DoLightningStrike();
                this.nextBlackLightning = this.summoningDuration - Rand.Range(25, 50);
            }
        }
Ejemplo n.º 15
0
        public static void Evaluate(CompAbilityUserMagic casterComp, TMAbilityDef abilitydef, PawnAbility ability, MagicPower power, float minDistance, out bool success)
        {
            success = false;
            Pawn            caster       = casterComp.Pawn;
            LocalTargetInfo jobTarget    = caster.CurJob.targetA;
            Thing           carriedThing = null;

            if (caster.CurJob.targetA.Thing != null)               //&& caster.CurJob.def.defName != "Sow")
            {
                if (caster.CurJob.targetA.Thing.Map != caster.Map) //carrying thing
                {
                    jobTarget    = caster.CurJob.targetB;
                    carriedThing = caster.CurJob.targetA.Thing;
                }
                else if (caster.CurJob.targetB != null && caster.CurJob.targetB.Thing != null && caster.CurJob.def != JobDefOf.Rescue) //targetA using targetB for job
                {
                    if (caster.CurJob.targetB.Thing.Map != caster.Map)                                                                 //carrying targetB to targetA
                    {
                        jobTarget    = caster.CurJob.targetA;
                        carriedThing = caster.CurJob.targetB.Thing;
                    }
                    else if (caster.CurJob.def == JobDefOf.TendPatient)
                    {
                        jobTarget = caster.CurJob.targetB;
                    }
                    else //Getting targetA to carry to TargetB
                    {
                        jobTarget = caster.CurJob.targetA;
                    }
                }
                else
                {
                    jobTarget = caster.CurJob.targetA;
                }
            }
            float   distanceToTarget  = (jobTarget.Cell - caster.Position).LengthHorizontal;
            Vector3 directionToTarget = TM_Calc.GetVector(caster.Position, jobTarget.Cell);

            //Log.Message("" + caster.LabelShort + " job def is " + caster.CurJob.def.defName + " targetA " + caster.CurJob.targetA + " targetB " + caster.CurJob.targetB + " jobTarget " + jobTarget + " at distance " + distanceToTarget + " min distance " + minDistance + " at vector " + directionToTarget);
            if (casterComp.Mana.CurLevel >= casterComp.ActualManaCost(abilitydef) && ability.CooldownTicksLeft <= 0 && distanceToTarget < 200)
            {
                if (distanceToTarget > minDistance && caster.CurJob.locomotionUrgency >= LocomotionUrgency.Jog && caster.CurJob.bill == null)
                {
                    if (distanceToTarget <= abilitydef.MainVerb.range && jobTarget.Cell != default(IntVec3))
                    {
                        //Log.Message("doing blink to thing");
                        DoBlink(caster, jobTarget.Cell, ability, carriedThing);
                        success = true;
                    }
                    else
                    {
                        IntVec3 blinkToCell = caster.Position + (directionToTarget * abilitydef.MainVerb.range).ToIntVec3();
                        //Log.Message("doing partial blink to cell " + blinkToCell);
                        //MoteMaker.ThrowHeatGlow(blinkToCell, caster.Map, 1f);
                        if (blinkToCell.IsValid && blinkToCell.InBounds(caster.Map) && blinkToCell.Walkable(caster.Map) && !blinkToCell.Fogged(caster.Map) && ((blinkToCell - caster.Position).LengthHorizontal < distanceToTarget))
                        {
                            DoBlink(caster, blinkToCell, ability, carriedThing);
                            success = true;
                        }
                    }
                }
            }
        }
Ejemplo n.º 16
0
 public override void GameConditionTick()
 {
     if (Find.TickManager.TicksGame % 37 == 0)
     {
         Pawn p = this.SingleMap.mapPawns.AllPawnsSpawned.RandomElement();
         if (p.def != TorannMagicDefOf.TM_GiantSkeletonR && p.def != TorannMagicDefOf.TM_SkeletonLichR && p.def != TorannMagicDefOf.TM_SkeletonR && p.def != TorannMagicDefOf.TM_DemonR && p.def != TorannMagicDefOf.TM_LesserDemonR && p.health != null && !p.Downed && p.health.hediffSet != null && !TM_Calc.IsUndead(p))
         {
             HealthUtility.AdjustSeverity(p, TorannMagicDefOf.TM_DeathMarkCurse, Rand.Range(6, 10));
             TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Disease, p.DrawPos, p.Map, 1.4f, .7f, .1f, 1f, Rand.Range(-20, 20), .2f, Rand.Range(-20, 20), Rand.Range(0, 360));
             TM_MoteMaker.ThrowGenericMote(TorannMagicDefOf.Mote_Disease, p.DrawPos, p.Map, 1f, .5f, .1f, .5f, Rand.Range(-20, 20), .3f, Rand.Range(-30, 30), Rand.Range(0, 360));
         }
     }
     base.GameConditionTick();
 }
Ejemplo n.º 17
0
        public override void DoSettingsWindowContents(Rect canvas)
        {
            int   num       = 0;
            float rowHeight = 28f;

            Widgets.BeginScrollView(canvas, ref scrollPosition, canvas);

            Rect rect1 = new Rect(canvas);

            rect1.width /= 2f;
            num++;
            num++;
            SettingsRef settingsRef = new SettingsRef();
            Rect        rowRect     = UIHelper.GetRowRect(rect1, rowHeight, num);

            Settings.Instance.xpMultiplier = Widgets.HorizontalSlider(rowRect, Settings.Instance.xpMultiplier, .1f, 2f, false, "XPMultiplier".Translate() + " " + Settings.Instance.xpMultiplier, ".1", "2", .1f);
            Rect rowRectShiftRight = UIHelper.GetRowRect(rowRect, rowHeight, num);

            rowRectShiftRight.x     += rowRect.width + 56f;
            rowRectShiftRight.width /= 2;
            classOptions             = Widgets.ButtonText(rowRectShiftRight, "Class Options", true, false, true);
            if (classOptions)
            {
                Rect rect = new Rect(64f, 64f, 400, 400);
                ClassOptionsWindow newWindow = new ClassOptionsWindow();
                Find.WindowStack.Add(newWindow);
            }
            num++;
            Rect rowRect2 = UIHelper.GetRowRect(rowRect, rowHeight, num);

            Settings.Instance.needMultiplier = Widgets.HorizontalSlider(rowRect2, Settings.Instance.needMultiplier, .1f, 4f, false, "NeedMultiplier".Translate() + " " + Settings.Instance.needMultiplier, ".1", "4", .1f);
            Rect rowRect2ShiftRight = UIHelper.GetRowRect(rowRect2, rowHeight, num);

            rowRect2ShiftRight.x     += rowRect.width + 56f;
            rowRect2ShiftRight.width /= 2;
            eventOptions              = Widgets.ButtonText(rowRect2ShiftRight, "Event Options", true, false, true);
            if (eventOptions)
            {
                Rect rect = new Rect(64f, 64f, 400, 400);
                EventOptionsWindow newWindow = new EventOptionsWindow();
                Find.WindowStack.Add(newWindow);
            }
            num++;
            Rect rowRect21 = UIHelper.GetRowRect(rowRect2, rowHeight, num);

            Settings.Instance.magicyteChance = Widgets.HorizontalSlider(rowRect21, Settings.Instance.magicyteChance, 0, .05f, false, "MagicyteChance".Translate() + " " + Settings.Instance.magicyteChance, "0%", "5%", .001f);
            num++;
            Rect rowRect3 = UIHelper.GetRowRect(rowRect21, rowHeight, num);

            rowRect3.width = rowRect3.width * .7f;
            Settings.Instance.deathExplosionRadius = Widgets.HorizontalSlider(rowRect3, Settings.Instance.deathExplosionRadius, .1f, 6f, false, "DeathRadius".Translate() + " " + Settings.Instance.deathExplosionRadius, ".1", "6", .1f);
            Rect rowRect31 = new Rect(rowRect3.xMax + 4f, rowRect3.y, rowRect2.width / 2, rowRect3.height);

            Widgets.TextFieldNumericLabeled <int>(rowRect31, "DeathExplosionMin".Translate(), ref Settings.Instance.deathExplosionMin, ref this.deathExplosionDmgMin, 0, 100);
            Rect rowRect32 = new Rect(rowRect31.xMax + 4f, rowRect3.y, rowRect2.width / 2, rowRect3.height);

            Widgets.TextFieldNumericLabeled <int>(rowRect32, "DeathExplosionMax".Translate(), ref Settings.Instance.deathExplosionMax, ref this.deathExplosionDmgMax, 0, 200);
            num++;
            Rect rowRect4 = UIHelper.GetRowRect(rowRect3, rowHeight, num);

            Settings.Instance.baseMageChance = Widgets.HorizontalSlider(rowRect4, Settings.Instance.baseMageChance, 0f, 5f, false, "baseMageChance".Translate() + " " + Rarity(Settings.Instance.baseMageChance) + " " + TM_Calc.GetMagePrecurserChance().ToString("P1"), "0", "5", .01f);
            num++;
            Rect rowRect5 = UIHelper.GetRowRect(rowRect4, rowHeight, num);

            Settings.Instance.baseFighterChance = Widgets.HorizontalSlider(rowRect5, Settings.Instance.baseFighterChance, 0f, 5f, false, "baseFighterChance".Translate() + " " + Rarity(Settings.Instance.baseFighterChance) + " " + TM_Calc.GetFighterPrecurserChance().ToString("P1"), "0", "5", .01f);
            Rect rowRect5ShiftRight = UIHelper.GetRowRect(rowRect5, rowHeight, num);

            rowRect5ShiftRight.x += rowRect5.width + 56f;
            Widgets.CheckboxLabeled(rowRect5ShiftRight, "TM_enableAutocast".Translate(), ref Settings.Instance.autocastEnabled, false);
            num++;
            Rect rowRect6 = UIHelper.GetRowRect(rowRect5, rowHeight, num);

            Settings.Instance.advMageChance = Widgets.HorizontalSlider(rowRect6, Settings.Instance.advMageChance, 0f, 2f, false, "advMageChance".Translate() + " " + Rarity(Settings.Instance.advMageChance) + " " + TM_Calc.GetMageSpawnChance().ToString("P1"), "0", "2", .01f);
            Rect rowRect6ShiftRight = UIHelper.GetRowRect(rowRect6, rowHeight, num);

            rowRect6ShiftRight.x += rowRect6.width + 56f;
            Settings.Instance.autocastMinThreshold = Widgets.HorizontalSlider(rowRect6ShiftRight, Settings.Instance.autocastMinThreshold, 0f, 1f, false, "TM_autocastUndraftedThreshold".Translate() + " " + (Settings.Instance.autocastMinThreshold * 100) + "%", "0", "1", .01f);
            num++;
            Rect rowRect66 = UIHelper.GetRowRect(rowRect6, rowHeight, num);

            Settings.Instance.advFighterChance = Widgets.HorizontalSlider(rowRect66, Settings.Instance.advFighterChance, 0f, 2f, false, "advFighterChance".Translate() + " " + Rarity(Settings.Instance.advFighterChance) + " " + TM_Calc.GetFighterSpawnChance().ToString("P1"), "0", "2", .01f);
            Rect rowRect66ShiftRight = UIHelper.GetRowRect(rowRect66, rowHeight, num);

            rowRect66ShiftRight.x += rowRect66.width + 56f;
            Settings.Instance.autocastCombatMinThreshold = Widgets.HorizontalSlider(rowRect66ShiftRight, Settings.Instance.autocastCombatMinThreshold, 0f, 1f, false, "TM_autocastDraftedThreshold".Translate() + " " + (Settings.Instance.autocastCombatMinThreshold * 100) + "%", "0", "1", .01f);
            num++;
            Rect rowRect67 = UIHelper.GetRowRect(rowRect66, rowHeight, num);

            Settings.Instance.paracyteSoftCap = Widgets.HorizontalSlider(rowRect67, Settings.Instance.paracyteSoftCap, 0, 500, false, "TM_ParacyteSoftCap".Translate() + " " + (Settings.Instance.paracyteSoftCap), "0", "500", 1);
            Rect rowRect67ShiftRight = UIHelper.GetRowRect(rowRect67, rowHeight, num);

            rowRect67ShiftRight.x += rowRect67.width + 56f;
            Settings.Instance.autocastEvaluationFrequency = Mathf.RoundToInt(Widgets.HorizontalSlider(rowRect67ShiftRight, Settings.Instance.autocastEvaluationFrequency, 60, 600, false, "TM_autocastEvaluationFrequency".Translate() + " " + (Settings.Instance.autocastEvaluationFrequency / 60) + "seconds", "1", "10", .1f));
            num++;
            Rect rowRect68 = UIHelper.GetRowRect(rowRect67, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect68, "TM_ParacyteMagesCount".Translate(), ref Settings.Instance.paracyteMagesCount, false);
            num++;
            Rect rowRect7 = UIHelper.GetRowRect(rowRect68, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect7, "AICanCast".Translate(), ref Settings.Instance.AICasting, false);
            Rect rowRect7ShiftRight = UIHelper.GetRowRect(rowRect7, rowHeight, num);

            rowRect7ShiftRight.x += rowRect7.width + 56f;
            Widgets.CheckboxLabeled(rowRect7ShiftRight, "AIHardMode".Translate(), ref Settings.Instance.AIHardMode, !settingsRef.AICasting);
            num++;
            Rect rowRect9 = UIHelper.GetRowRect(rowRect7, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect9, "AIMarking".Translate(), ref Settings.Instance.AIMarking, false);
            Rect rowRect91 = UIHelper.GetRowRect(rowRect9, rowHeight, num);

            rowRect91.x += rowRect9.width + 56f;
            Widgets.CheckboxLabeled(rowRect91, "AIFighterMarking".Translate(), ref Settings.Instance.AIFighterMarking, false);
            num++;
            Rect rowRect92 = UIHelper.GetRowRect(rowRect9, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect92, "AIFriendlyMarking".Translate(), ref Settings.Instance.AIFriendlyMarking, false);
            Rect rowRect92ShiftRight = UIHelper.GetRowRect(rowRect92, rowHeight, num);

            rowRect92ShiftRight.x += rowRect92.width + 56f;
            Widgets.CheckboxLabeled(rowRect92ShiftRight, "showLevelUpMessage".Translate(), ref Settings.Instance.showLevelUpMessage, false);
            num++;
            Rect rowRect93 = UIHelper.GetRowRect(rowRect92, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect93, "showMagicGizmo".Translate(), ref Settings.Instance.showGizmo, false);
            Rect rowRect93ShiftRight = UIHelper.GetRowRect(rowRect93, rowHeight, num);

            rowRect93ShiftRight.x += rowRect93.width + 56f;
            Widgets.CheckboxLabeled(rowRect93ShiftRight, "showUndeadPawnChange".Translate(), ref Settings.Instance.changeUndeadPawnAppearance, false);
            num++;
            Rect rowRect10 = UIHelper.GetRowRect(rowRect93, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect10, "showAbilitiesOnMultiSelect".Translate(), ref Settings.Instance.showIconsMultiSelect, false);
            Rect rowRect10ShiftRight = UIHelper.GetRowRect(rowRect10, rowHeight, num);

            rowRect10ShiftRight.x += rowRect10.width + 56f;
            Widgets.CheckboxLabeled(rowRect10ShiftRight, "showUndeadAnimalChange".Translate(), ref Settings.Instance.changeUndeadAnimalAppearance, false);
            num++;
            Rect rowRect11 = UIHelper.GetRowRect(rowRect10, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect11, "unrestrictedBloodTypesForBloodMagic".Translate(), ref Settings.Instance.unrestrictedBloodTypes, false);
            Rect rowRect11ShiftRight = UIHelper.GetRowRect(rowRect11, rowHeight, num);

            rowRect11ShiftRight.x += rowRect11.width + 56f;
            Widgets.CheckboxLabeled(rowRect11ShiftRight, "showClassIconOnColonistBar".Translate(), ref Settings.Instance.showClassIconOnColonistBar, false);
            num++;
            Rect rowRect12 = UIHelper.GetRowRect(rowRect11, rowHeight, num);

            Widgets.CheckboxLabeled(rowRect12, "TM_AggressiveAICasting".Translate(), ref Settings.Instance.AIAggressiveCasting, false);
            Rect rowRect12ShiftRight = UIHelper.GetRowRect(rowRect12, rowHeight, num);

            rowRect12ShiftRight.x += rowRect12.width + 56f;
            if (Settings.Instance.showClassIconOnColonistBar)
            {
                Settings.Instance.classIconSize = Widgets.HorizontalSlider(rowRect12ShiftRight, Settings.Instance.classIconSize, .5f, 2.5f, false, "classIconSize".Translate() + " " + Settings.Instance.classIconSize.ToString("P1"), "0", "2.5", .01f);
            }
            num++;
            num++;
            Rect rowRect20 = UIHelper.GetRowRect(rowRect10, rowHeight, num);

            rowRect20.width = 120f;
            Rect rowRect20ShiftRight1 = UIHelper.GetRowRect(rowRect20, rowHeight, num);

            rowRect20ShiftRight1.x = rowRect20.width + 40f;
            Rect rowRect20ShiftRight2 = UIHelper.GetRowRect(rowRect20ShiftRight1, rowHeight, num);

            rowRect20ShiftRight2.x = rowRect20.width + rowRect20ShiftRight1.width + 40f;
            //GUI.color = Color.yellow;
            //GUI.backgroundColor = Color.yellow;
            reset = Widgets.ButtonText(rowRect20, "Default", true, false, true);
            if (reset)
            {
                Settings.Instance.xpMultiplier                 = 1f;
                Settings.Instance.needMultiplier               = 1f;
                Settings.Instance.deathExplosionRadius         = 3f;
                Settings.Instance.deathExplosionMin            = 20;
                Settings.Instance.deathExplosionMax            = 50;
                Settings.Instance.AICasting                    = true;
                Settings.Instance.AIHardMode                   = false;
                Settings.Instance.AIMarking                    = true;
                Settings.Instance.AIFighterMarking             = false;
                Settings.Instance.AIFriendlyMarking            = false;
                Settings.Instance.baseMageChance               = 1f;
                Settings.Instance.baseFighterChance            = 1f;
                Settings.Instance.advMageChance                = 0.5f;
                Settings.Instance.advFighterChance             = 0.5f;
                Settings.Instance.magicyteChance               = .005f;
                Settings.Instance.showIconsMultiSelect         = true;
                Settings.Instance.showGizmo                    = true;
                Settings.Instance.showLevelUpMessage           = true;
                Settings.Instance.changeUndeadPawnAppearance   = true;
                Settings.Instance.changeUndeadAnimalAppearance = true;
                Settings.Instance.showClassIconOnColonistBar   = true;
                Settings.Instance.classIconSize                = 1f;
                Settings.Instance.AIAggressiveCasting          = true;
                Settings.Instance.paracyteSoftCap              = 50f;
                Settings.Instance.paracyteMagesCount           = true;
                Settings.Instance.riftChallenge                = 1f;
                Settings.Instance.wanderingLichChallenge       = 1f;
                this.deathExplosionDmgMax = "50.0";
                this.deathExplosionDmgMin = "20.0";

                Settings.Instance.autocastEnabled             = true;
                Settings.Instance.autocastMinThreshold        = .7f;
                Settings.Instance.autocastCombatMinThreshold  = .2f;
                Settings.Instance.autocastEvaluationFrequency = 180;
            }

            challenge = Widgets.ButtonText(rowRect20ShiftRight1, "Challenge me!", true, false, true);
            if (challenge)
            {
                Settings.Instance.xpMultiplier                 = .75f;
                Settings.Instance.needMultiplier               = .75f;
                Settings.Instance.deathExplosionRadius         = 5f;
                Settings.Instance.deathExplosionMin            = 30;
                Settings.Instance.deathExplosionMax            = 60;
                Settings.Instance.AICasting                    = true;
                Settings.Instance.AIHardMode                   = true;
                Settings.Instance.AIMarking                    = false;
                Settings.Instance.AIFighterMarking             = false;
                Settings.Instance.AIFriendlyMarking            = false;
                Settings.Instance.baseMageChance               = .8f;
                Settings.Instance.baseFighterChance            = .8f;
                Settings.Instance.advMageChance                = 1.5f;
                Settings.Instance.advFighterChance             = 1.5f;
                Settings.Instance.magicyteChance               = .003f;
                Settings.Instance.showIconsMultiSelect         = true;
                Settings.Instance.showGizmo                    = true;
                Settings.Instance.showLevelUpMessage           = false;
                Settings.Instance.changeUndeadPawnAppearance   = true;
                Settings.Instance.changeUndeadAnimalAppearance = true;
                Settings.Instance.showClassIconOnColonistBar   = true;
                Settings.Instance.AIAggressiveCasting          = true;
                Settings.Instance.paracyteSoftCap              = 30f;
                Settings.Instance.paracyteMagesCount           = true;
                Settings.Instance.riftChallenge                = 3f;
                Settings.Instance.wanderingLichChallenge       = 3f;
                this.deathExplosionDmgMax = "60.0";
                this.deathExplosionDmgMin = "30.0";

                Settings.Instance.autocastEnabled             = true;
                Settings.Instance.autocastMinThreshold        = .8f;
                Settings.Instance.autocastCombatMinThreshold  = .2f;
                Settings.Instance.autocastEvaluationFrequency = 300;
            }

            //easy = Widgets.ButtonText(rowRect20ShiftRight1, "Easy", true, false, true);
            if (easy)
            {
                Settings.Instance.xpMultiplier                 = 1.5f;
                Settings.Instance.needMultiplier               = 2f;
                Settings.Instance.deathExplosionRadius         = 1f;
                Settings.Instance.deathExplosionMin            = 5;
                Settings.Instance.deathExplosionMax            = 10;
                Settings.Instance.AICasting                    = false;
                Settings.Instance.AIHardMode                   = false;
                Settings.Instance.AIMarking                    = false;
                Settings.Instance.AIFighterMarking             = false;
                Settings.Instance.AIFriendlyMarking            = false;
                Settings.Instance.baseMageChance               = 2f;
                Settings.Instance.baseFighterChance            = 2f;
                Settings.Instance.advMageChance                = 1f;
                Settings.Instance.advFighterChance             = 1f;
                Settings.Instance.magicyteChance               = .01f;
                Settings.Instance.showIconsMultiSelect         = true;
                Settings.Instance.showGizmo                    = true;
                Settings.Instance.showLevelUpMessage           = true;
                Settings.Instance.changeUndeadPawnAppearance   = true;
                Settings.Instance.changeUndeadAnimalAppearance = true;
                Settings.Instance.showClassIconOnColonistBar   = true;
                Settings.Instance.AIAggressiveCasting          = false;
                Settings.Instance.riftChallenge                = 1f;
                this.deathExplosionDmgMax = "5.0";
                this.deathExplosionDmgMin = "10.0";

                Settings.Instance.autocastEnabled             = true;
                Settings.Instance.autocastMinThreshold        = .6f;
                Settings.Instance.autocastCombatMinThreshold  = .05f;
                Settings.Instance.autocastEvaluationFrequency = 180;
            }

            Widgets.EndScrollView();
        }