コード例 #1
0
        public static string GetIconForPassion(SkillRecord skill)
        {
            if (!Active)
            {
                return(null);
            }

            if (!UsableInterestList.Any())
            {
                return(null);
            }


            Passion passionValue = skill.passion;
            Def     interest;

            try
            {
                interest = UsableInterestList[(int)passionValue];
            }
            catch (Exception)
            {
                return(string.Empty);
            }

            if (interest != null)
            {
                return(InterestIndex.TryGetValue(interest.defName, string.Empty).AltText($"{interest.LabelCap.RawText}"));
            }

            return(string.Empty);
        }
コード例 #2
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Photo,SubTitle,Title,Text")] Passion passion)
        {
            if (id != passion.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(passion);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PassionExists(passion.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(passion));
        }
コード例 #3
0
        private static Color ColorOfPriority(int prio, Passion passion)
        {
            if (!WidgetsWork.ColorCodedWorkPassions)
            {
                switch (prio)
                {
                case 1:
                    return(Color.green);

                case 2:
                    return(new Color(1f, 0.9f, 0.6f));

                case 3:
                    return(new Color(0.8f, 0.7f, 0.5f));

                case 4:
                    return(new Color(0.6f, 0.6f, 0.6f));

                default:
                    return(Color.grey);
                }
            }
            else
            {
                if (passion == Passion.Minor)
                {
                    return(new Color(1f, 1f, 0f));
                }
                if (passion != Passion.Major)
                {
                    return(new Color(0.8f, 0.8f, 0.8f));
                }
                return(new Color(0f, 1f, 0f));
            }
        }
コード例 #4
0
        private static bool Prefix(Passion passion, ref Color __result)
        {
            int         p        = (int)passion;
            InterestDef interest = InterestBase.interestList[p];
            float       val      = interest.GetValue();

            if (val < 0)
            {
                if (val / 75.0f < 1.0f)
                {
                    __result = veryNegativeColor;
                }
                else
                {
                    __result = negativeColor;
                }
            }
            else if (val == 0)
            {
                __result = neutralColor;
            }
            else
            {
                if (val / 75.0f > 1.0f)
                {
                    __result = veryPositiveColor;
                }
                else
                {
                    __result = positiveColor;
                }
            }
            return(false);
        }
コード例 #5
0
        public override void TryExecute()
        {
            float customMultiplier = LevelPawnSettings.xpMultiplier > 0 ? LevelPawnSettings.xpMultiplier : 0.5f;
            float xpWon            = pawn.skills.GetSkill(skill).XpRequiredForLevelUp *customMultiplier *((float)Verse.Rand.Range(0.5f, 1.5f));

            xpWon = IncidentHelper_PointsHelper.RollProportionalGamePoints(storeIncident, pointsWager, xpWon);

            pawn.skills.Learn(skill, xpWon, true);
            Viewer.TakeViewerCoins(pointsWager);
            Viewer.CalculateNewKarma(this.storeIncident.karmaType, pointsWager);

            SkillRecord record       = pawn.skills.GetSkill(skill);
            string      increaseText = $" Level {record.levelInt}: {(int)record.xpSinceLastLevel} / {(int)record.XpRequiredForLevelUp}.";

            float   percent     = 35;
            string  passionPlus = "";
            Passion passion     = record.passion;

            if (passion == Passion.Minor)
            {
                percent     = 100;
                passionPlus = "+";
            }
            if (passion == Passion.Major)
            {
                percent     = 150;
                passionPlus = "++";
            }

            VariablesHelpers.SendPurchaseMessage($"Increasing skill {skill.LabelCap} for {pawn.LabelCap} with {pointsWager} coins wagered and ({(int)xpWon} * {percent}%){passionPlus} {(int)xpWon * (percent / 100f)} xp purchased by {Viewer.username}. {increaseText}");
            string text = Helper.ReplacePlaceholder("TwitchStoriesDescription55".Translate(), colonist: pawn.Name.ToString(), skill: skill.defName, first: Math.Round(xpWon).ToString());

            Current.Game.letterStack.ReceiveLetter("TwitchToolkitIncreaseSkill".Translate(), text, LetterDefOf.PositiveEvent, pawn);
        }
コード例 #6
0
        private static void DrawWorkBoxBackground(Rect rect, Pawn p, WorkTypeDef workDef)
        {
            Profiler.BeginSample("AverageOfRelevantSkillsFor");
            float num = p.skills.AverageOfRelevantSkillsFor(workDef);

            Profiler.EndSample();
            Texture2D image;
            Texture2D image2;
            float     a;

            if (num < 4f)
            {
                image  = WidgetsWork.WorkBoxBGTex_Awful;
                image2 = WidgetsWork.WorkBoxBGTex_Bad;
                a      = num / 4f;
            }
            else if (num <= 14f)
            {
                image  = WidgetsWork.WorkBoxBGTex_Bad;
                image2 = WidgetsWork.WorkBoxBGTex_Mid;
                a      = (num - 4f) / 10f;
            }
            else
            {
                image  = WidgetsWork.WorkBoxBGTex_Mid;
                image2 = WidgetsWork.WorkBoxBGTex_Excellent;
                a      = (num - 14f) / 6f;
            }
            GUI.DrawTexture(rect, image);
            GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, a);
            GUI.DrawTexture(rect, image2);
            if (workDef.relevantSkills.Any <SkillDef>() && num <= 2f && p.workSettings.WorkIsActive(workDef))
            {
                GUI.color = Color.white;
                GUI.DrawTexture(rect.ContractedBy(-2f), WidgetsWork.WorkBoxOverlay_Warning);
            }
            Passion passion = p.skills.MaxPassionOfRelevantSkillsFor(workDef);

            if (passion > Passion.None)
            {
                GUI.color = new Color(1f, 1f, 1f, 0.4f);
                Rect position = rect;
                position.xMin = rect.center.x;
                position.yMin = rect.center.y;
                if (passion == Passion.Minor)
                {
                    GUI.DrawTexture(position, WidgetsWork.PassionWorkboxMinorIcon);
                }
                else if (passion == Passion.Major)
                {
                    GUI.DrawTexture(position, WidgetsWork.PassionWorkboxMajorIcon);
                }
            }
            GUI.color = Color.white;
        }
コード例 #7
0
        private static void DrawWorkBoxBackground(Rect rect, Pawn p, WorkTypeDef workDef)
        {
            float     num = p.skills.AverageOfRelevantSkillsFor(workDef);
            Texture2D image;
            Texture2D image2;
            float     a;

            if (num < 4f)
            {
                image  = WorkBoxBGTex_Awful;
                image2 = WorkBoxBGTex_Bad;
                a      = num / 4f;
            }
            else if (num <= 14f)
            {
                image  = WorkBoxBGTex_Bad;
                image2 = WorkBoxBGTex_Mid;
                a      = (num - 4f) / 10f;
            }
            else
            {
                image  = WorkBoxBGTex_Mid;
                image2 = WorkBoxBGTex_Excellent;
                a      = (num - 14f) / 6f;
            }
            GUI.DrawTexture(rect, image);
            GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, a);
            GUI.DrawTexture(rect, image2);
            if (workDef.relevantSkills.Any() && num <= 2f && p.workSettings.WorkIsActive(workDef))
            {
                GUI.color = Color.white;
                GUI.DrawTexture(rect.ContractedBy(-2f), WorkBoxOverlay_Warning);
            }
            Passion passion = p.skills.MaxPassionOfRelevantSkillsFor(workDef);

            if ((int)passion > 0)
            {
                GUI.color = new Color(1f, 1f, 1f, 0.4f);
                Rect position = rect;
                position.xMin = rect.center.x;
                position.yMin = rect.center.y;
                switch (passion)
                {
                case Passion.Minor:
                    GUI.DrawTexture(position, PassionWorkboxMinorIcon);
                    break;

                case Passion.Major:
                    GUI.DrawTexture(position, PassionWorkboxMajorIcon);
                    break;
                }
            }
            GUI.color = Color.white;
        }
コード例 #8
0
        public async Task <IActionResult> Create([Bind("Id,Photo,SubTitle,Title,Text")] Passion passion)
        {
            if (ModelState.IsValid)
            {
                _context.Add(passion);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(passion));
        }
コード例 #9
0
        protected override IEnumerable <string> ApplyPartWorker(Pawn pawn, object cause)
        {
            SkillRecord realSkill = pawn.skills.GetSkill(skill);

            Passion adjustedPassion = (Passion)MathUtility.MoveTowardsOperationClamped((byte)realSkill.passion, (byte)target, delta, operation);

            yield return(MessageSkillPassionChanged.Translate(pawn.LabelShort, skill.label, adjustedPassion.ToString().ToLower(), ParseCause(cause)));

            realSkill.passion = adjustedPassion;
            // We're done here.
            yield break;
        }
コード例 #10
0
        /// <summary> The new passion of the skill with this mod. </summary>
        public Passion GetNewPassion(Passion oldPassion)
        {
            if (forcedPassion != null)
            {
                return(forcedPassion.Value);
            }

            int nP = (int)oldPassion + passionOffset;

            nP = Mathf.Clamp(nP, 0, 2);
            return((Passion)nP);
        }
コード例 #11
0
ファイル: CuMExtensions.cs プロジェクト: asky74/RimMod
        public static float getCuMWorth(this Passion p)
        {
            switch (p)
            {
            case Passion.None: return(0);

            case Passion.Minor: return(QOLMod.getBaseCost() * 2);

            case Passion.Major: return(QOLMod.getBaseCost() * 3);
            }
            Log.Error("Unknown Passion type while calculation upgrade cost!");
            return(0);
        }
コード例 #12
0
        /// <summary>
        /// Draws pawn Passion on the lower right side of a rect.
        /// </summary>
        public static void DrawPassion(Rect drawRect, Pawn worker, WorkTypeDef workDef)
        {
            //WidgetsWork.DrawWorkBoxBackground
            Passion passion = worker.skills.MaxPassionOfRelevantSkillsFor(workDef);

            if (passion > Passion.None)
            {
                Rect    passionRect = new Rect(drawRect.xMax - PassionDrawSize - 2f, drawRect.yMax - PassionDrawSize - 2f, PassionDrawSize, PassionDrawSize);
                Texture passionTex  = passion == Passion.Minor ? PassionMinorIcon : PassionMajorIcon;

                GUI.DrawTexture(passionRect, passionTex);
            }
        }
コード例 #13
0
ファイル: Personne.cs プロジェクト: belgarion01/LesPatchs
    public bool hasAttributes(Passion passion)
    {
        bool toReturn = false;

        foreach (PassionObject PO in Attributes)
        {
            if (PO.passion == passion)
            {
                toReturn = true;
            }
        }

        return(toReturn);
    }
コード例 #14
0
        protected virtual void DrawWorkGiverBoxFor(Rect box, Pawn pawn, WorkGiverDef workgiver, bool incapable)
        {
            List <SkillDef> skillsNeeded = workgiver.workType.relevantSkills;
            float           averageSkill = pawn.skills.AverageOfRelevantSkillsFor(workgiver.workType);

            Passion passion = Passion.None;

            if (skillsNeeded.Count > 0)
            {
                passion = pawn.skills.GetSkill(workgiver.workType.relevantSkills[0]).passion;
            }

            Color red   = new Color(1f, 0f, 0f);
            Color green = new Color(0f, 1f, 0f);
            Color blue  = new Color(0f, 0f, 1f);
            Color black = new Color(0f, 0f, 0f);

            Color passionColor;

            if (passion == Passion.None)
            {
                passionColor = red;
            }
            else if (passion == Passion.Minor)
            {
                passionColor = blue;
            }
            else
            {
                passionColor = green;
            }

            GUI.color = Color.Lerp(black + (passionColor * 0.2f), passionColor, averageSkill / 20);
            // draw background
            //GUI.color = incapable ? new Color( 1f, .3f, .3f ) : Color.white;

            DrawUtilities.DrawWorkBoxBackground(box, pawn, workgiver.workType);
            GUI.color = Color.white;

            // draw extras
            var tracker = PriorityManager.Get[pawn];

            if (tracker.TimeScheduled(workgiver))
            {
                DrawUtilities.DrawTimeScheduled(box);
            }

            // draw priorities / checks
            DrawUtilities.DrawPriority(box, pawn.GetPriority(workgiver, VisibleHour), true);
        }
コード例 #15
0
        public IActionResult Change(int PasId, Passion formPassion)
        {
            Passion RetrievedPassion = dbContext.Passions.FirstOrDefault(Passion => Passion.PasId == PasId);

            if (ModelState.IsValid)
            {
                RetrievedPassion.PasName    = formPassion.PasName;
                RetrievedPassion.PasContent = formPassion.PasContent;
                RetrievedPassion.UserId     = RetrievedPassion.UserId;
                RetrievedPassion.UpdatedAt  = DateTime.Now;
                dbContext.SaveChanges();
                return(RedirectToAction("ShowPas", new { PasId = PasId }));
            }
            return(View("Update", RetrievedPassion));
        }
コード例 #16
0
 private static bool Prefix(ref object __instance, ref HashSet <Pawn> ____capablePawns, ref HashSet <Pawn> ____managedPawns, ref HashSet <WorkTypeDef> ____managedWorkTypes, IEnumerable <WorkTypeDef> ____commonWorkTypes)
 {
     if (!____capablePawns.Any <Pawn>())
     {
         return(false);
     }
     using (IEnumerator <Pawn> enumerator = ____capablePawns.Intersect(____managedPawns).GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             Pawn pawn = enumerator.Current;
             IEnumerable <WorkTypeDef> managedWorkTypes = ____managedWorkTypes;
             var isBadWork               = AccessTools.Method(PatchWorkManagerBase.priority, "IsBadWork");
             var isPawnWorkTypeActive    = AccessTools.Method(PatchWorkManagerBase.priority, "IsPawnWorkTypeActive");
             var setPawnWorkTypePriority = AccessTools.Method(PatchWorkManagerBase.priority, "SetPawnWorkTypePriority");
             foreach (WorkTypeDef workType in managedWorkTypes)
             {
                 if (____commonWorkTypes.Contains(workType) || workType == WorkTypeDefOf.Doctor || workType == WorkTypeDefOf.Hunting || pawn.WorkTypeIsDisabled(workType) ||
                     (bool)isBadWork.Invoke(__instance, new object [] { pawn, workType }) || (bool)isPawnWorkTypeActive.Invoke(__instance, new object [] { pawn, workType }))
                 {
                     continue;
                 }
                 Passion passion = pawn.skills.MaxPassionOfRelevantSkillsFor(workType);
                 float   val     = InterestBase.interestList[(int)passion].GetValue();
                 if (val > 0)
                 {
                     if (val >= 100)
                     {
                         int priority = 2;
                         setPawnWorkTypePriority.Invoke(__instance, new object[] { pawn, workType, priority });
                     }
                     else
                     {
                         int priority = 3;
                         setPawnWorkTypePriority.Invoke(__instance, new object[] { pawn, workType, priority });
                     }
                 }
                 else if (val < -50)
                 {
                     int priority = 4;
                     setPawnWorkTypePriority.Invoke(__instance, new object[] { pawn, workType, priority });
                 }
             }
         }
     }
     return(false);
 }
コード例 #17
0
ファイル: SkillModel.cs プロジェクト: waywun/RimHUD
        private static Color GetSkillPassionColor(Passion passion)
        {
            if (passion == Passion.None)
            {
                return(Theme.MainTextColor.Value);
            }
            if (passion == Passion.Minor)
            {
                return(Theme.SkillMinorPassionColor.Value);
            }
            if (passion == Passion.Major)
            {
                return(Theme.SkillMajorPassionColor.Value);
            }

            throw new Mod.Exception("Invalid skill passion level.");
        }
コード例 #18
0
 public IActionResult Plan(Passion newPassion)
 {
     if (ModelState.IsValid)
     {
         Passion submittedPassion = newPassion;
         if (dbContext.Passions.Any(p => p.PasName == newPassion.PasName))
         {
             ModelState.AddModelError("PasName", "Hobby names must be unique!");
             return(View("New"));
         }
         newPassion.UserId = (int)UserSessionData;
         dbContext.Add(newPassion);
         dbContext.SaveChanges();
         return(RedirectToAction("GetAll", newPassion));
     }
     return(View("New"));
 }
コード例 #19
0
        public static void DrawInterest(Passion passion, Rect position)
        {
            Texture2D image;

            if (InterestBase.interestList.GetDefaultIndex() == (int)passion)
            {
                image = ContentFinder <Texture2D> .Get("EdB/PrepareCarefully/NoPassion", true);
            }
            else
            {
                image = InterestBase.interestList[(int)passion].GetTexture();
            }
            GUI.color = Color.white;
            if (image != null)
            {
                GUI.DrawTexture(position, image);
            }
        }
コード例 #20
0
        public Passion MaxPassionOfRelevantSkillsFor(WorkTypeDef workDef)
        {
            if (workDef.relevantSkills.Count == 0)
            {
                return(Passion.None);
            }
            Passion passion = Passion.None;

            for (int i = 0; i < workDef.relevantSkills.Count; i++)
            {
                Passion passion2 = GetSkill(workDef.relevantSkills[i]).passion;
                if ((int)passion2 > (int)passion)
                {
                    passion = passion2;
                }
            }
            return(passion);
        }
コード例 #21
0
        private static bool Prefix(ref float __result, bool direct, Passion ___passion, SkillRecord __instance, Pawn ___pawn)
        {
            if (DebugSettings.fastLearning)
            {
                __result = 200f;
                return(false);
            }
            float num = InterestBase.LearnRateFactor(___passion);

            if (!direct)
            {
                num *= ___pawn.GetStatValue(StatDefOf.GlobalLearningFactor, true);
                if (__instance.LearningSaturatedToday)
                {
                    num *= 0.2f;
                }
            }
            __result = num;
            return(false);
        }
        private static void Postfix(ref Passion __result, WorkTypeDef workDef, Pawn_SkillTracker __instance)
        {
            int highestPassion = InterestBase.interestList.GetDefaultIndex();

            if (workDef.relevantSkills.Count == 0)
            {
                __result = (Passion)highestPassion;
                return;
            }

            for (int i = 0; i < workDef.relevantSkills.Count; i++)
            {
                int passion2 = (int)__instance.GetSkill(workDef.relevantSkills[i]).passion;
                if (InterestBase.interestList[passion2] > InterestBase.interestList[highestPassion])
                {
                    highestPassion = passion2;
                }
            }
            __result = (Passion)highestPassion;
        }
コード例 #23
0
        private void ShuffleWithInterests()
        {
            var            iterations   = 0;
            int            passionCount = _pawn.skills.skills.Select(s => (int)s.passion).Where(p => p < 3).Sum();
            List <Passion> interests    = _pawn.skills.skills.Where(s => (int)s.passion >= 3).Select(s => s.passion).ToList();

            passionCount = GetPassionCount(passionCount);

            if (!ShufflePassions(passionCount, ref iterations))
            {
                return;
            }

            while (interests.Any())
            {
                SkillRecord skill = _pawn.skills.skills.Where(s => !s.TotallyDisabled).Where(s => s.passion == Passion.None).RandomElementWithFallback();

                if (skill == null)
                {
                    iterations += 1;

                    continue;
                }

                Passion interest = interests.RandomElementWithFallback();

                skill.passion = interest;

                interests.Remove(interest);
                iterations += 1;

                if (iterations < 150)
                {
                    continue;
                }

                TkUtils.Logger.Warn("Exceeded 100 iterations while shuffling interests!");

                return;
            }
        }
コード例 #24
0
        private static void DrawWorkBoxBackground(Rect rect, Pawn p, WorkTypeDef workDef)
        {
            float     num = p.skills.AverageOfRelevantSkillsFor(workDef);
            Texture2D image;
            Texture2D image2;
            float     a;

            if (num <= 14f)
            {
                image  = WidgetsWork.WorkBoxBGTex_Bad;
                image2 = WidgetsWork.WorkBoxBGTex_Mid;
                a      = num / 14f;
            }
            else
            {
                image  = WidgetsWork.WorkBoxBGTex_Mid;
                image2 = WidgetsWork.WorkBoxBGTex_Excellent;
                a      = (num - 14f) / 6f;
            }
            GUI.DrawTexture(rect, image);
            GUI.color = new Color(1f, 1f, 1f, a);
            GUI.DrawTexture(rect, image2);
            Passion passion = p.skills.MaxPassionOfRelevantSkillsFor(workDef);

            if (passion > Passion.None)
            {
                GUI.color = new Color(1f, 1f, 1f, 0.4f);
                Rect position = rect;
                position.xMin = rect.center.x;
                position.yMin = rect.center.y;
                if (passion == Passion.Minor)
                {
                    GUI.DrawTexture(position, WidgetsWork.PassionWorkboxMinorIcon);
                }
                else if (passion == Passion.Major)
                {
                    GUI.DrawTexture(position, WidgetsWork.PassionWorkboxMajorIcon);
                }
            }
            GUI.color = Color.white;
        }
コード例 #25
0
        private static bool Prefix(float global_lf, Passion passion, bool learning_saturated, ref float __result)
        {
            bool fastLearning = DebugSettings.fastLearning;

            if (fastLearning)
            {
                __result = 200f;
            }
            else
            {
                float       num   = global_lf - 1f;
                InterestDef id    = InterestBase.interestList[(int)passion];
                float       toAdd = id.learnFactor;
                num += toAdd;
                if (learning_saturated)
                {
                    num *= 0.2f;
                }
                __result = num;
            }
            return(false);
        }
コード例 #26
0
        public virtual float CommonalityFor(Pawn pawn)
        {
            float num = 1f;

            if (pawn.skills != null && this.def.associatedSkills != null)
            {
                for (int i = 0; i < this.def.associatedSkills.Count; i++)
                {
                    SkillDef skillDef = this.def.associatedSkills[i];
                    for (int j = 0; j < pawn.skills.skills.Count; j++)
                    {
                        SkillRecord skillRecord = pawn.skills.skills[j];
                        if (skillDef == skillRecord.def)
                        {
                            Passion passion = pawn.skills.skills[j].passion;
                            if (passion != Passion.None)
                            {
                                if (passion != Passion.Minor)
                                {
                                    if (passion == Passion.Major)
                                    {
                                        num = Mathf.Max(num, 5f);
                                    }
                                }
                                else
                                {
                                    num = Mathf.Max(num, 2.5f);
                                }
                            }
                            else
                            {
                                num = Mathf.Max(num, 1f);
                            }
                        }
                    }
                }
            }
            return(this.def.baseCommonality * num);
        }
コード例 #27
0
        public Passion MaxPassionOfRelevantSkillsFor(WorkTypeDef workDef)
        {
            Passion result;

            if (workDef.relevantSkills.Count == 0)
            {
                result = Passion.None;
            }
            else
            {
                Passion passion = Passion.None;
                for (int i = 0; i < workDef.relevantSkills.Count; i++)
                {
                    Passion passion2 = this.GetSkill(workDef.relevantSkills[i]).passion;
                    if (passion2 > passion)
                    {
                        passion = passion2;
                    }
                }
                result = passion;
            }
            return(result);
        }
コード例 #28
0
 public void Learn(float xp, bool direct = false)
 {
     if (this.TotallyDisabled)
     {
         return;
     }
     if (xp < 0f && this.levelInt == 0)
     {
         return;
     }
     if (xp > 0f)
     {
         if (this.pawn.needs.joy != null)
         {
             float   amount  = 0f;
             Passion passion = this.passion;
             if (passion != Passion.Minor)
             {
                 if (passion != Passion.Major)
                 {
                     if (passion == Passion.None)
                     {
                         amount = 0f * xp;
                     }
                 }
                 else
                 {
                     amount = 4E-05f * xp;
                 }
             }
             else
             {
                 amount = 2E-05f * xp;
             }
             this.pawn.needs.joy.GainJoy(amount, JoyKindDefOf.Work);
         }
         xp *= this.LearnRateFactor(direct);
     }
     this.xpSinceLastLevel += xp;
     if (!direct)
     {
         this.xpSinceMidnight += xp;
     }
     if (this.levelInt == 20 && this.xpSinceLastLevel > this.XpRequiredForLevelUp - 1f)
     {
         this.xpSinceLastLevel = this.XpRequiredForLevelUp - 1f;
     }
     while (this.xpSinceLastLevel >= this.XpRequiredForLevelUp)
     {
         this.xpSinceLastLevel -= this.XpRequiredForLevelUp;
         this.levelInt++;
         if (this.levelInt == 14)
         {
             if (this.passion == Passion.None)
             {
                 TaleRecorder.RecordTale(TaleDefOf.GainedMasterSkillWithoutPassion, new object[]
                 {
                     this.pawn,
                     this.def
                 });
             }
             else
             {
                 TaleRecorder.RecordTale(TaleDefOf.GainedMasterSkillWithPassion, new object[]
                 {
                     this.pawn,
                     this.def
                 });
             }
         }
         if (this.levelInt >= 20)
         {
             this.levelInt         = 20;
             this.xpSinceLastLevel = Mathf.Clamp(this.xpSinceLastLevel, 0f, this.XpRequiredForLevelUp - 1f);
             break;
         }
     }
     while (this.xpSinceLastLevel < 0f)
     {
         this.levelInt--;
         this.xpSinceLastLevel += this.XpRequiredForLevelUp;
         if (this.levelInt <= 0)
         {
             this.levelInt         = 0;
             this.xpSinceLastLevel = 0f;
             break;
         }
     }
 }
コード例 #29
0
        private static string GetSkillDescription(SkillRecord sk)
        {
            StringBuilder stringBuilder = new StringBuilder();

            if (sk.TotallyDisabled)
            {
                stringBuilder.Append("DisabledLower".Translate().CapitalizeFirst());
            }
            else
            {
                stringBuilder.AppendLine(string.Concat(new object[]
                {
                    "Level".Translate(),
                    " ",
                    sk.Level,
                    ": ",
                    sk.LevelDescriptor
                }));
                if (Current.ProgramState == ProgramState.Playing)
                {
                    string text = (sk.Level != 20) ? "ProgressToNextLevel".Translate() : "Experience".Translate();
                    stringBuilder.AppendLine(string.Concat(new object[]
                    {
                        text,
                        ": ",
                        sk.xpSinceLastLevel.ToString("F0"),
                        " / ",
                        sk.XpRequiredForLevelUp
                    }));
                }
                stringBuilder.Append("Passion".Translate() + ": ");
                Passion passion = sk.passion;
                if (passion != Passion.None)
                {
                    if (passion != Passion.Minor)
                    {
                        if (passion == Passion.Major)
                        {
                            stringBuilder.Append("PassionMajor".Translate(new object[]
                            {
                                1.5f.ToStringPercent("F0")
                            }));
                        }
                    }
                    else
                    {
                        stringBuilder.Append("PassionMinor".Translate(new object[]
                        {
                            1f.ToStringPercent("F0")
                        }));
                    }
                }
                else
                {
                    stringBuilder.Append("PassionNone".Translate(new object[]
                    {
                        0.35f.ToStringPercent("F0")
                    }));
                }
                if (sk.LearningSaturatedToday)
                {
                    stringBuilder.AppendLine();
                    stringBuilder.Append("LearnedMaxToday".Translate(new object[]
                    {
                        sk.xpSinceMidnight.ToString("F0"),
                        4000,
                        0.2f.ToStringPercent("F0")
                    }));
                }
            }
            stringBuilder.AppendLine();
            stringBuilder.AppendLine();
            stringBuilder.Append(sk.def.description);
            return(stringBuilder.ToString());
        }
コード例 #30
0
 public void UpdateSkillPassion(SkillDef skill, Passion level)
 {
     state.CurrentPawn.SetPassion(skill, level);
 }