public static void SetSkills(this HediffComp_RandySpawnUponDeath comp, Pawn newPawn, bool debug = false) { if (!comp.ChosenItem.copyParent.skills) { return; } string myDebugSr = newPawn.LabelShort + " - SetSkills - "; for (int i = 0; i < newPawn.skills.skills.Count; i++) { float decayRatio = comp.ChosenItem.copyParent.skillDecay.RandomInRange; int wantedLevel = (int)(comp.Pawn.skills.skills[i].levelInt * decayRatio); if (debug) { Log.Warning( myDebugSr + " browsing " + comp.Pawn.skills.skills[i].def.defName + " ori: " + comp.Pawn.skills.skills[i].levelInt + " new: " + newPawn.skills.skills[i].levelInt + " decayRatio: " + decayRatio + " wantedSkill: " + wantedLevel //" rememberSkillTracker: " + comp.rememberSkillTracker.skills[i].levelInt ); } if (wantedLevel > newPawn.skills.skills[i].levelInt) { if (debug) { Log.Warning(myDebugSr + "Calling gainskill"); } comp.GainSkill(newPawn, wantedLevel, i, debug); } else if (wantedLevel < newPawn.skills.skills[i].levelInt) { if (debug) { Log.Warning(myDebugSr + "Calling loseskill"); } comp.LoseSkill(newPawn, wantedLevel, i, debug); } if (debug) { Log.Warning( myDebugSr + " copied skill [" + i + "]:" + comp.Pawn.skills.skills[i].def.defName + " new: " + newPawn.skills.skills[i].levelInt ); } //newSkill.xpSinceLastLevel = originalSkill.xpSinceLastLevel; } }