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); } } }
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; } } } } }
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)); } } } } }
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); }
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); }
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(); }
public bool IsUndead(Pawn pawn) => TM_Calc.IsUndead(pawn);
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); } } }
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); } } } }
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; } } }
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; } } }
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; } } }
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); } }
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; } } } } }
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(); }
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(); }