private static int sum_previous_gains(SkillDef def, Pawn_StoryTracker sto, Pawn_AgeTracker age) { int total_gain = 0; int gain; // Gains from backstories if (sto.childhood.skillGainsResolved.TryGetValue(def, out gain)) { total_gain += gain; } if (sto.adulthood.skillGainsResolved.TryGetValue(def, out gain)) { total_gain += gain; } // Gains from traits foreach (var trait in sto.traits.allTraits) { if (trait.CurrentData.skillGains.TryGetValue(def, out gain)) { total_gain += gain; } } // Gains from age //Rand.PopState(); //Rand.PushState(RJW_Multiplayer.PredictableSeed()); var rgain = Rand.Value * (float)total_gain * 0.35f; var age_factor = Mathf.Clamp01((age.AgeBiologicalYearsFloat - 17.0f) / 10.0f); // Assume nymphs are 17~27 total_gain += (int)(age_factor * rgain); return(Mathf.Clamp(total_gain, 0, 20)); }
// Token: 0x06000057 RID: 87 RVA: 0x000057F8 File Offset: 0x000039F8 public static void ChkMSImmunisation(Pawn p, out string Reason, out bool Passed) { Reason = null; if (!p.RaceProps.Humanlike) { Passed = false; Reason = "MSExotic.NotHumanLike".Translate(p?.LabelShort.CapitalizeFirst()); return; } TraitDef Immunity = DefDatabase <TraitDef> .GetNamed("Immunity", true); if (p.story.traits.HasTrait(Immunity) && p != null) { Pawn_StoryTracker story = p.story; int?num; if (story == null) { num = null; } else { TraitSet traits = story.traits; num = ((traits != null) ? new int?(traits.GetTrait(Immunity).Degree) : null); } int?num2 = num; int num3 = 1; if (num2.GetValueOrDefault() == num3 & num2 != null) { Passed = false; Reason = "MSExotic.AlreadyHasImmunity".Translate(p?.LabelShort.CapitalizeFirst()); return; } } Passed = true; }
// Token: 0x0600007C RID: 124 RVA: 0x000067F8 File Offset: 0x000049F8 public static void RemoveTrait(Pawn pawn, Trait trait, string doer, MessageTypeDef MsgType, bool SendMsg = true) { Pawn_StoryTracker story = pawn.story; Trait remTrait = (story != null) ? (from x in story.traits.allTraits where x.def == trait.def select x).FirstOrDefault() : null; if (remTrait == null) { return; } if (pawn != null) { Pawn_StoryTracker story2 = pawn.story; if (story2 != null) { story2.traits.allTraits.Remove(remTrait); } } MSTraitChanger.TraitsUpdated(pawn); if (SendMsg) { string key = "MSExotic.TraitRemoved"; NamedArgument arg = pawn?.LabelShort.CapitalizeFirst(); Trait trait2 = trait; Messages.Message(key.Translate(arg, trait2?.Label.CapitalizeFirst(), doer.CapitalizeFirst()), pawn, MsgType, true); } }
public override void SpawnSetup(Map map, bool respawningAfterLoad) { //Kill all invalid spawns if (this.station == null) { this.Kill(null); return; } base.SpawnSetup(map, respawningAfterLoad); skills = new Pawn_SkillTracker(this); skillSettings = station.def.GetModExtension <ModExtension_Skills>(); station.GetDroneSkillsRecord = DroneSkills.UpdateSkills(skills, station.GetDroneSkillsRecord, skillSettings, true); story = new Pawn_StoryTracker(this) { bodyType = BodyTypeDefOf.Thin, crownType = CrownType.Average, childhood = DroneBackstories.childhood, adulthood = DroneBackstories.adulthood }; drafter = new Pawn_DraftController(this); relations = new Pawn_RelationsTracker(this); Name = new NameSingle("PRFDroneName".Translate()); //Set the AreaRestriction. null means Unrestricted playerSettings.AreaRestriction = this.station.droneAllowedArea; }
public static Thing MakeGenomeSequence(Pawn pawn, ThingDef genomeDef) { Thing genomeThing = ThingMaker.MakeThing(genomeDef); GenomeSequence genomeSequence = genomeThing as GenomeSequence; if (genomeSequence != null) { //Standard. genomeSequence.sourceName = pawn?.Name?.ToStringFull ?? null; if (genomeSequence.sourceName == null) { genomeSequence.sourceName = pawn.def.LabelCap; } genomeSequence.pawnKindDef = pawn.kindDef; genomeSequence.gender = pawn.gender; if (pawn?.health?.hediffSet?.hediffs != null) { List <Hediff> pawnHediffs = pawn.health.hediffSet.hediffs; if (pawnHediffs.Count > 0) { foreach (Hediff h in pawnHediffs) { if (GeneralCompatibility.includedGenomeTemplateHediffs.Any(hediffDef => h.def.defName == hediffDef.defName)) { QEEMod.TryLog("Hediff " + h.def.defName + " will be added to genome template"); genomeSequence.hediffInfos.Add(new HediffInfo(h)); } } } } //Humanoid only. Pawn_StoryTracker story = pawn.story; if (story != null) { genomeSequence.bodyType = story.bodyType; genomeSequence.crownType = story.crownType; genomeSequence.hairColor = story.hairColor; genomeSequence.skinMelanin = story.melanin; genomeSequence.hair = story.hairDef; genomeSequence.headGraphicPath = story.HeadGraphicPath; foreach (Trait trait in story.traits.allTraits) { genomeSequence.traits.Add(new ExposedTraitEntry(trait)); } } //Alien Races compatibility. if (CompatibilityTracker.AlienRacesActive) { AlienRaceCompat.GetFieldsFromAlienComp(pawn, genomeSequence); } } return(genomeThing); }
private void ChangeBodyType(Pawn pawn, BodyTypeDef bt) { AlienPartGenerator alienPartGenerator = alienRace.alienRace.generalSettings.alienPartGenerator; var storyTrv = Traverse.Create(pawn.story); var newStory = new Pawn_StoryTracker(pawn); var newStoryTrv = Traverse.Create(newStory); AccessTools.GetFieldNames(typeof(Pawn_StoryTracker)) .ForEach(f => newStoryTrv.Field(f).SetValue(storyTrv.Field(f).GetValue())); newStory.bodyType = bt; if (Props.colourSkinTwo || Props.colourSkin) { if (compAlien != null) { ColorChannelGenerator Alienskin = alienRace.alienRace.generalSettings.alienPartGenerator.colorChannels.Find(x => x.name == "skin"); AlienPartGenerator.ExposableValueTuple <UnityEngine.Color, UnityEngine.Color> skin; if (compAlien.ColorChannels.TryGetValue("skin", out skin)) { if (Props.colourSkin && Alienskin?.first != null) { skin.first = Alienskin.first.NewRandomizedColor(); } if (Props.colourSkinTwo && Alienskin?.second != null) { skin.second = Alienskin.second.NewRandomizedColor(); } compAlien.ColorChannels.SetOrAdd("skin", skin); } Traverse.Create(newStory).Field("SkinColor").SetValue(skin.first); Pawn.Notify_ColorChanged(); } } if (Props.changeHead) { List <string> heads = new List <string>(); if (!Props.crownType.NullOrEmpty()) { heads.Add(Props.crownType); } else { heads.AddRange(alienPartGenerator.aliencrowntypes); } compAlien.crownType = null; if (Pawn.story.HeadGraphicPath.Contains("Average")) { newStory.crownType = CrownType.Average; } else if (Pawn.story.HeadGraphicPath.Contains("Narrow")) { newStory.crownType = CrownType.Narrow; } } pawn.story = newStory; Traverse.Create(newStory).Field("headGraphicPath").SetValue(alienRace.alienRace.graphicPaths.GetCurrentGraphicPath(pawn.ageTracker.CurLifeStage).head.NullOrEmpty() ? "" : alienPartGenerator.RandomAlienHead(alienRace.alienRace.graphicPaths.GetCurrentGraphicPath(pawn.ageTracker.CurLifeStage).head, Pawn)); pawn.Drawer.renderer.graphics.ResolveAllGraphics(); Find.ColonistBar.drawer.Notify_RecachedEntries(); }
private void InitStory() { // Story story = new Pawn_StoryTracker(this) { childhood = Childhood, adulthood = Adulthood, }; }
private void trainPawnDone(String def) { PawnGenerationRequest request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed(def, true), Faction.OfPlayer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 1f, false, true, true, false, false, false, false, null, null, null, null, null, null, null); Pawn item = PawnGenerator.GeneratePawn(request); Pawn_StoryTracker ps = item.story; ps.childhood = null; ps.adulthood = null; ps.traits.allTraits = new List <Trait>(); ps.traits.GainTrait(new Trait(DefDatabase <TraitDef> .GetNamed("ra2_MakeSoldier", true))); ps.traits.GainTrait(new Trait(TraitDefOf.Psychopath)); Pawn_WorkSettings pws = item.workSettings; pws.DisableAll(); Pawn_PlayerSettings pps = item.playerSettings; pps.hostilityResponse = HostilityResponseMode.Attack; NameTriple triple = NameTriple.FromString(item.kindDef.label.Replace(" ", "")); item.Name = triple; item.inventory.DestroyAll(); YuriSoldierMakeUp.tryMakeUp(item); SoundStarter.PlayOneShotOnCamera(DefDatabase <SoundDef> .GetNamed(this.parent.def.defName + "_UnitReady", true)); IntVec3 loc = CellFinder.RandomClosewalkCellNear(this.parent.Position, this.parent.Map, 3, null); Pawn pp; if (this.trainPawns[0] != "ra2_AlliedTanya") { pp = (Pawn)(GenSpawn.Spawn(item, loc, this.parent.Map, WipeMode.Vanish)); } else { // bool flag = true; if (getAllTanya().Count > 0) { foreach (Pawn tanya in getAllTanya()) { tanya.Destroy(DestroyMode.Vanish); } } pp = (Pawn)(GenSpawn.Spawn(getTanya(), loc, this.parent.Map, WipeMode.Vanish)); } this.trainPawns.Remove(this.trainPawns[0]); this.ticks = 0; }
public static void SetMayorLabel(Pawn_StoryTracker __instance, ref String __result) { Pawn p = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>(); if (p != null && p.health.hediffSet.HasHediff(HediffDefOfPsychology.Mayor)) { __result = "MayorTitle".Translate(); } }
public static Thing MakeBrainScan(Pawn pawn, ThingDef genomeDef) { Thing brainScanThing = ThingMaker.MakeThing(genomeDef); BrainScanTemplate brainScan = brainScanThing as BrainScanTemplate; if (brainScan != null) { //Standard. brainScan.sourceName = pawn?.Name?.ToStringFull ?? null; //Backgrounds Pawn_StoryTracker story = pawn.story; if (story != null) { brainScan.backStoryChild = story.childhood; brainScan.backStoryAdult = story.adulthood; } //Skills Pawn_SkillTracker skillTracker = pawn.skills; if (skillTracker != null) { foreach (SkillRecord skill in skillTracker.skills) { brainScan.skills.Add(new SkillRecord() { def = skill.def, Level = skill.Level, passion = skill.passion }); } } //Animal brainScan.isAnimal = pawn.RaceProps.Animal; //Training Pawn_TrainingTracker trainingTracker = pawn.training; if (trainingTracker != null) { DefMap <TrainableDef, bool> learned = (DefMap <TrainableDef, bool>)AccessTools.Field(typeof(Pawn_TrainingTracker), "learned").GetValue(trainingTracker); DefMap <TrainableDef, int> steps = (DefMap <TrainableDef, int>)AccessTools.Field(typeof(Pawn_TrainingTracker), "steps").GetValue(trainingTracker); //Copy foreach (var item in learned) { brainScan.trainingLearned[item.Key] = item.Value; } foreach (var item in steps) { brainScan.trainingSteps[item.Key] = item.Value; } } } return(brainScanThing); }
public static void ApplyBrainScanTemplateOnPawn(Pawn thePawn, BrainScanTemplate brainScan, float efficency = 1f) { if(thePawn.IsValidBrainScanningTarget()) { //Backgrounds Pawn_StoryTracker storyTracker = thePawn.story; if (storyTracker != null) { //story.childhood = brainScan.backStoryChild; storyTracker.adulthood = brainScan.backStoryAdult; } //Skills Pawn_SkillTracker skillTracker = thePawn.skills; if (skillTracker != null) { foreach (ComparableSkillRecord skill in brainScan.skills) { SkillRecord pawnSkill = skillTracker.GetSkill(skill.def); pawnSkill.Level = (int)Math.Floor((float)skill.level * efficency); pawnSkill.passion = skill.passion; pawnSkill.Notify_SkillDisablesChanged(); } } //Dirty hack ahoy! if(storyTracker != null) { AccessTools.Field(typeof(Pawn_StoryTracker), "cachedDisabledWorkTypes").SetValue(storyTracker, null); } //Training Pawn_TrainingTracker trainingTracker = thePawn.training; if (trainingTracker != null) { DefMap<TrainableDef, bool> learned = (DefMap<TrainableDef, bool>)AccessTools.Field(typeof(Pawn_TrainingTracker), "learned").GetValue(trainingTracker); DefMap<TrainableDef, int> steps = (DefMap<TrainableDef, int>)AccessTools.Field(typeof(Pawn_TrainingTracker), "steps").GetValue(trainingTracker); //Copy foreach (var item in brainScan.trainingLearned) { learned[item.Key] = item.Value; } foreach (var item in brainScan.trainingSteps) { steps[item.Key] = (int)Math.Floor((float)item.Value * efficency); } } //Apply Hediff thePawn.health.AddHediff(QEHediffDefOf.QE_BrainTemplated); Messages.Message("QE_BrainTemplatingComplete".Translate(thePawn.Named("PAWN")), MessageTypeDefOf.PositiveEvent, false); } }
public static void ChangeBodyType(Pawn pawn, BodyTypeDef bt) { var storyTrv = Traverse.Create(pawn.story); var newStory = new Pawn_StoryTracker(pawn); var newStoryTrv = Traverse.Create(newStory); AccessTools.GetFieldNames(typeof(Pawn_StoryTracker)) .ForEach(f => newStoryTrv.Field(f).SetValue(storyTrv.Field(f).GetValue())); newStory.bodyType = bt; pawn.story = newStory; pawn.Drawer.renderer.graphics.ResolveAllGraphics(); }
// RimWorld.Pawn_StoryTracker public static bool get_SkinColor_Vamp(Pawn_StoryTracker __instance, ref Color __result) { Pawn p = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>(); if (p.IsVampire()) { __result = VampireSkinColors.GetVampireSkinColor(p, Traverse.Create(__instance).Field("melanin").GetValue <float>()); return(false); } return(true); }
private void ChangeBodyType(Pawn pawn, BodyTypeDef bt) { var storyTrv = Traverse.Create(pawn.story); var newStory = new Pawn_StoryTracker(pawn); var newStoryTrv = Traverse.Create(newStory); AccessTools.GetFieldNames(typeof(Pawn_StoryTracker)) .ForEach(f => newStoryTrv.Field(f).SetValue(storyTrv.Field(f).GetValue())); newStory.bodyType = bt; pawn.story = newStory; pawn.Drawer.renderer.graphics.ResolveAllGraphics(); Find.ColonistBar.drawer.Notify_RecachedEntries(); }
public static void RefreshStoryTracker(Pawn_StoryTracker storyTracker, Pawn pawn) { var req = new PawnGenerationRequest(pawn.kindDef, canGeneratePawnRelations: false); if (storyTracker.adulthood != null) { GenerateBodyType.GetValue(pawn, default(PawnGenerationRequest)); } if (storyTracker.adulthood?.forcedTraits != null || storyTracker.childhood?.forcedTraits != null) { storyTracker.traits.allTraits.Clear(); GenerateTraits.GetValue(pawn, req); } }
// Token: 0x0600007D RID: 125 RVA: 0x000068C8 File Offset: 0x00004AC8 public static void AddTrait(Pawn pawn, Trait trait, string doer, MessageTypeDef MsgType, bool SendMsg = true) { if (pawn != null) { Pawn_StoryTracker story = pawn.story; if (story != null) { story.traits.GainTrait(trait); } } MSTraitChanger.TraitsUpdated(pawn); if (SendMsg) { Messages.Message("MSExotic.TraitAdded".Translate(pawn?.LabelShort.CapitalizeFirst(), trait?.Label.CapitalizeFirst(), doer.CapitalizeFirst()), pawn, MsgType, true); } }
private static List <WorkTypeDef> GetRandomWorkTypes(Pawn_StoryTracker story) { List <WorkTypeDef> workTypes = new List <WorkTypeDef>(); while (workTypes.Count == 0) { var typeDef = DefDatabase <WorkTypeDef> .GetRandom(); // these are not allowed if (!story.WorkTypeIsDisabled(typeDef)) { workTypes.Add(typeDef); } } return(workTypes); }
private Pawn getTanya() { PawnGenerationRequest request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed("ra2_AlliedTanya", true), Faction.OfPlayer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 1f, false, true, true, false, false, false, false, null, null, null, null, null, Gender.Female, null, null); Pawn item = PawnGenerator.GeneratePawn(request); Pawn_StoryTracker ps = item.story; HairDef hair = DefDatabase <HairDef> .GetNamed("Curly"); ps.childhood = null; ps.adulthood = null; ps.traits.allTraits = new List <Trait>(); ps.traits.GainTrait(new Trait(DefDatabase <TraitDef> .GetNamed("ra2_MakeSoldier", true))); ps.traits.GainTrait(new Trait(TraitDefOf.Psychopath)); Pawn_WorkSettings pws = item.workSettings; pws.DisableAll(); NameTriple triple = NameTriple.FromString(item.kindDef.label); triple.ResolveMissingPieces("Adams".Translate()); item.Name = triple; Pawn_SkillTracker skt = item.skills; foreach (SkillRecord sr in skt.skills) { sr.Level = 20; } item.inventory.DestroyAll(); ps.bodyType = BodyTypeDefOf.Female; ps.hairDef = hair; ps.hairColor = new UnityEngine.Color(1, 0.8f, 0); //st.SkinColor = new UnityEngine.Color(0.98f,0.76f,0.71f); ps.melanin = 0f; Pawn_EquipmentTracker pe = item.equipment; pe.Remove(pe.Primary); pe.AddEquipment((ThingWithComps)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("ra2_Gun_Tanya", true))); //item.story = st; return(item); }
// Token: 0x06000056 RID: 86 RVA: 0x0000571C File Offset: 0x0000391C public static void DoMSImmunisation(Pawn p, ThingDef t) { bool Sickly = false; MessageTypeDef MsgType = MessageTypeDefOf.PositiveEvent; TraitDef Immunity = DefDatabase <TraitDef> .GetNamed("Immunity", true); if (p.story.traits.HasTrait(Immunity) && p != null) { Pawn_StoryTracker story = p.story; int?num; if (story == null) { num = null; } else { TraitSet traits = story.traits; num = ((traits != null) ? new int?(traits.GetTrait(Immunity).Degree) : null); } int?num2 = num; int num3 = -1; if (num2.GetValueOrDefault() == num3 & num2 != null) { Sickly = true; } } if (Sickly) { Pawn_StoryTracker story2 = p.story; Trait trait; if (story2 == null) { trait = null; } else { TraitSet traits2 = story2.traits; trait = (traits2?.GetTrait(Immunity)); } Trait ToGo = trait; MSTraitChanger.RemoveTrait(p, ToGo, t.label, MsgType, true); return; } Trait ToAdd = new Trait(Immunity, 1, false); MSTraitChanger.AddTrait(p, ToAdd, t.label, MsgType, true); }
// Token: 0x06000058 RID: 88 RVA: 0x000058E0 File Offset: 0x00003AE0 public static void DoMSCerebrax(Pawn p, ThingDef t) { int degree = 0; MessageTypeDef MsgType = MessageTypeDefOf.PositiveEvent; TraitDef Psych = DefDatabase <TraitDef> .GetNamed("PsychicSensitivity", true); if (p.story.traits.HasTrait(Psych)) { degree = p.story.traits.GetTrait(Psych).Degree; } if (degree == 2) { Pawn_StoryTracker story = p.story; Trait trait; if (story == null) { trait = null; } else { TraitSet traits = story.traits; trait = (traits?.GetTrait(Psych)); } Trait ToGo = trait; MSTraitChanger.RemoveTrait(p, ToGo, t.label, MsgType, true); Trait ToAdd = new Trait(Psych, 1, false); MSTraitChanger.AddTrait(p, ToAdd, t.label, MsgType, false); return; } if (degree == 1) { Pawn_StoryTracker story2 = p.story; Trait trait2; if (story2 == null) { trait2 = null; } else { TraitSet traits2 = story2.traits; trait2 = (traits2?.GetTrait(Psych)); } Trait ToGo2 = trait2; MSTraitChanger.RemoveTrait(p, ToGo2, t.label, MsgType, true); } }
/// <summary> /// Restores the alien Comp attached to the parent from the ones stored earlier /// this does not resolve the graphics, that is the job of the caller /// </summary> public void RestoreGraphics() { Assert(_scanned, "_scanned"); var comp = parent.GetComp <AlienPartGenerator.AlienComp>(); comp.SetSkinColor(SkinColor, SkinColorSecond); comp.customDrawSize = CustomDrawSize; comp.customPortraitDrawSize = CustomPortraitDrawSize; comp.fixGenderPostSpawn = FixGenderPostSpawn; comp.SetHairColor(HairColor, HairColorSecond); comp.crownType = CrownType; Pawn_StoryTracker story = ((Pawn)parent).story; story.hairColor = HairColor; story.hairDef = HairDef; story.bodyType = BodyType; }
public static void ChangeBodyType(Pawn pawn, BodyTypeDef bt) { var storyTrv = Traverse.Create(pawn.story); var newStory = new Pawn_StoryTracker(pawn); var newStoryTrv = Traverse.Create(newStory); AccessTools.GetFieldNames(typeof(Pawn_StoryTracker)) .ForEach(f => newStoryTrv.Field(f).SetValue(storyTrv.Field(f).GetValue())); newStory.bodyType = bt; pawn.story = newStory; IntVec3 pos = pawn.Position; Map map = pawn.Map; Building_Bed bed = null; Rot4 rot = pawn.Rotation; bool spawned = pawn.Map != null; bool selected = Find.Selector.SelectedPawns.Contains(pawn); bool drafted = pawn.Drafted; bool inBed = pawn.InBed(); pawn.Drawer.renderer.graphics.ResolveAllGraphics(); if (spawned) { pawn.DeSpawn(); GenSpawn.Spawn(pawn, pos, map); pawn.Rotation = rot; } if (drafted) { pawn.drafter.Drafted = true; } if (selected) { Find.Selector.SelectedObjects.Add(pawn); } if (inBed) { if (bed != null) { pawn.jobs.Notify_TuckedIntoBed(bed); pawn.mindState.Notify_TuckedIntoBed(); } } }
public static bool Prefix(Pawn_StoryTracker __instance, ref Color __result) { Pawn pawn = (Pawn)typeof(Pawn_StoryTracker).GetField("pawn", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance); CompTFTracker tracker = pawn.GetComp <CompTFTracker>(); Color skinColor = tracker?.LoadData <Color>(null, "skinColor") ?? Color.clear; if (skinColor.NullOrClear()) { // Allow the original method. return(true); } else { __result = skinColor; // Don't allow original to execute. return(false); } }
public static Thing MakeGenomeSequence(Pawn pawn, ThingDef genomeDef) { Thing genomeThing = ThingMaker.MakeThing(genomeDef); GenomeSequence genomeSequence = genomeThing as GenomeSequence; if (genomeSequence != null) { //Standard. genomeSequence.sourceName = pawn?.Name?.ToStringFull ?? null; genomeSequence.pawnName = pawn.Name as NameTriple; if (genomeSequence.sourceName == null) { genomeSequence.sourceName = pawn.def.LabelCap; } genomeSequence.pawnKindDef = pawn.kindDef; genomeSequence.gender = pawn.gender; //Humanoid only. Pawn_StoryTracker story = pawn.story; if (story != null) { genomeSequence.bodyType = story.bodyType; genomeSequence.crownType = story.crownType; genomeSequence.hairColor = story.hairColor; genomeSequence.skinMelanin = story.melanin; foreach (Trait trait in story.traits.allTraits) { genomeSequence.traits.Add(new ExposedTraitEntry(trait)); } } //Alien Races compatibility. if (CompatibilityTracker.AlienRacesActive) { AlienRaceCompat.GetFieldsFromAlienComp(pawn, genomeSequence); } } return(genomeThing); }
public override void SpawnSetup(Map map, bool respawningAfterLoad) { base.SpawnSetup(map, respawningAfterLoad); skills = new Pawn_SkillTracker(this); foreach (SkillRecord record in skills.skills) { record.levelInt = 20; record.passion = Passion.None; } story = new Pawn_StoryTracker(this) { bodyType = BodyTypeDefOf.Thin, crownType = CrownType.Average, childhood = DroneBackstories.childhood, adulthood = DroneBackstories.adulthood }; drafter = new Pawn_DraftController(this); relations = new Pawn_RelationsTracker(this); Name = new NameSingle("PRFDroneName".Translate()); }
public override void SpawnSetup(Map map, bool respawningAfterLoad) { base.SpawnSetup(map, respawningAfterLoad); skills = new Pawn_SkillTracker(this); foreach (SkillRecord record in skills.skills) { record.levelInt = station.ConstructSkillLevel(); record.passion = Passion.None; } story = new Pawn_StoryTracker(this) { bodyType = BodyTypeDefOf.Thin, crownType = CrownType.Average, childhood = ConstructBackstories.childhood, adulthood = ConstructBackstories.adulthood }; drafter = new Pawn_DraftController(this); relations = new Pawn_RelationsTracker(this); Name = new NameSingle(ConstructDefOf.CanoptekScarab.label); }
// Token: 0x06000059 RID: 89 RVA: 0x000059B0 File Offset: 0x00003BB0 public static void ChkMSCerebrax(Pawn p, out string Reason, out bool Passed) { Reason = null; if (!p.RaceProps.Humanlike) { Passed = false; Reason = "MSExotic.NotHumanLike".Translate(p?.LabelShort.CapitalizeFirst()); return; } TraitDef Psych = DefDatabase <TraitDef> .GetNamed("PsychicSensitivity", true); if (p.story.traits.HasTrait(Psych)) { if (p != null) { Pawn_StoryTracker story = p.story; int?num; if (story == null) { num = null; } else { TraitSet traits = story.traits; num = ((traits != null) ? new int?(traits.GetTrait(Psych).Degree) : null); } int?num2 = num; int num3 = 0; if (num2.GetValueOrDefault() <= num3 & num2 != null) { Passed = false; Reason = "MSExotic.HasNoPsychSensitivity".Translate(p?.LabelShort.CapitalizeFirst()); return; } } Passed = true; return; } Passed = false; Reason = "MSExotic.HasNoPsychSensitivity".Translate(p?.LabelShort.CapitalizeFirst()); }
private static Pawn getTanya(IncidentParms parms) { PawnGenerationRequest request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed("ra2_AlliedTanya", true), parms.faction, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, true, 1f, false, true, true, false, false, false, false, null, null, null, null, null, Gender.Female, null, null); Pawn item = PawnGenerator.GeneratePawn(request); Pawn_StoryTracker st = item.story; HairDef hair = DefDatabase <HairDef> .GetNamed("Curly"); Dictionary <String, Backstory> bsdb = BackstoryDatabase.allBackstories; Backstory child = bsdb.TryGetValue("YouthSoldier99"); Backstory old = bsdb.TryGetValue("VeteranSoldier2"); st.adulthood = old; st.childhood = child; NameTriple triple = NameTriple.FromString(item.kindDef.label); triple.ResolveMissingPieces("Adams".Translate()); item.Name = triple; Pawn_SkillTracker skt = item.skills; foreach (SkillRecord sr in skt.skills) { sr.Level = 20; } st.bodyType = BodyTypeDefOf.Female; st.hairDef = hair; st.hairColor = new UnityEngine.Color(1, 0.8f, 0); //st.SkinColor = new UnityEngine.Color(0.98f,0.76f,0.71f); st.melanin = 0f; //item.story = st; return(item); }
static bool Prefix(Pawn_StoryTracker __instance, ref List <WorkTypeDef> __result) { Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>(); if (pawn.RaceProps.IsMechanoid && pawn.IsHacked()) { List <WorkTypeDef> shouldForbid = new List <WorkTypeDef>(); ExtendedDataStorage store = Base.Instance.GetExtendedDataStorage(); if (store != null) { ExtendedPawnData pawnData = Base.Instance.GetExtendedDataStorage().GetExtendedDataFor(pawn); foreach (WorkTypeDef def in DefDatabase <WorkTypeDef> .AllDefs) { if (pawnData.workTypes == null || !pawnData.workTypes.Contains(def)) { shouldForbid.Add(def); } } __result = shouldForbid; return(false); } } return(true); }
public static void Post_GeneratePawn(PawnGenerationRequest request, ref Pawn __result) { if (__result != null && __result.isOrkoid()) { if (__result.story == null) { if (__result.isSquig() && request.Context == PawnGenerationContext.PlayerStarter) { if (__result.ageTracker.AgeBiologicalYearsFloat > 5f) { Rand.PushState(); __result.ageTracker.AgeBiologicalTicks = ((float)Rand.RangeInclusive(1, 5) * 3600000).SecondsToTicks(); Rand.PopState(); } } return; } Pawn_StoryTracker storyTracker = __result.story; Backstory adulthood = storyTracker.adulthood; bool adult = adulthood != null; if (__result.isOrk()) { if (storyTracker.childhood.identifier.Contains("Ork_Base_Child")) { // Log.Message(__result.Name + ": Ork_Base_Child"); } else if (storyTracker.childhood.identifier.Contains("Ork_Odd_Child")) { // Log.Message(__result.Name + ": Ork_Odd_Child"); } else if (storyTracker.childhood.identifier.Contains("Ork_Weird_Child")) { // Log.Message(__result.Name + ": Ork_Weird_Child"); if (!storyTracker.traits.HasTrait(TraitDefOf.PsychicSensitivity)) { Trait trait = new Trait(TraitDefOf.PsychicSensitivity, 1); if (storyTracker.adulthood != null) { if (storyTracker.adulthood.identifier.Contains("_Boss")) { trait = new Trait(TraitDefOf.PsychicSensitivity, 2); } else if (storyTracker.adulthood.identifier.Contains("_Nob")) { Rand.PushState(); trait = new Trait(TraitDefOf.PsychicSensitivity, Rand.RangeInclusive(1, 2)); Rand.PopState(); } } __result.story.traits.GainTrait(trait); } if (AdeptusIntergrationUtility.enabled_Royalty) { if (!__result.health.hediffSet.HasHediff(HediffDefOf.PsychicAmplifier)) { Hediff_Psylink _Psylink = HediffMaker.MakeHediff(HediffDefOf.PsychicAmplifier, __result, __result.RaceProps.body.AllParts.FirstOrDefault(x => x.def == BodyPartDefOf.Brain)) as Hediff_Psylink; _Psylink.suppressPostAddLetter = true; __result.health.AddHediff(_Psylink); } if (adult) { if (storyTracker.adulthood.identifier.Contains("_Boss")) { Rand.PushState(); __result.ChangePsylinkLevel(Math.Min(Rand.RangeInclusive(3, 5), __result.GetMaxPsylinkLevel()), false); Rand.PopState(); } else if (storyTracker.adulthood.identifier.Contains("_Nob")) { Rand.PushState(); __result.ChangePsylinkLevel(Math.Min(Rand.RangeInclusive(1, 3), __result.GetMaxPsylinkLevel()), false); Rand.PopState(); } else if (adult) { Rand.PushState(); __result.ChangePsylinkLevel(Math.Min(Rand.RangeInclusive(0, 2), __result.GetMaxPsylinkLevel()), false); Rand.PopState(); } } } } } if (__result.isGrot()) { } /* * if (adult) * { * if (__result.isOrk()) * { * if (storyTracker.adulthood.identifier.Contains("_Boss") || storyTracker.adulthood.identifier.Contains("_Nob")) * { * HarmonyPatches.ChangeBodyType(__result, BodyTypeDefOf.Hulk); * } * else * { * HarmonyPatches.ChangeBodyType(__result, BodyTypeDefOf.Male); * } * } * } */ } }