namespace Aeshnidae.QuestBonus; /// /// The quest bonus's page in the Aeshnidae Codex. Found by Aeshnidae.Codex through /// reflection (a static class called CodexPage with Title and Pages(Player)), so /// nothing here references that mod. /// public static class CodexPage { public static string Title => "Quest Bonus"; public static string[] Pages(Player player) { if (player is null) return Array.Empty(); var points = player.GetQuestPoints(); var multiplier = player.QuestBonusMultiplier(); var settings = Mod.Settings; var sb = new StringBuilder(); sb.AppendLine("QUEST BONUS"); sb.AppendLine(); sb.AppendLine($"Quests solved: {points:0.##}"); sb.AppendLine($"Bonus to every experience award: {player.QuestBonusText()}"); sb.AppendLine(); if (settings.MaxMultiplier > 0) { var capPoints = (settings.MaxMultiplier - 1) / Math.Max(1e-9, settings.BonusConversion); if (multiplier >= settings.MaxMultiplier) sb.AppendLine($"You are at the ceiling of x{settings.MaxMultiplier:0.##}."); else sb.AppendLine($"Ceiling x{settings.MaxMultiplier:0.##}, at {capPoints:N0} quests. {Math.Max(0, capPoints - points):N0} to go."); sb.AppendLine(); } sb.AppendLine($"Every quest solved for the first time adds {settings.DefaultPoints * settings.BonusConversion * 100:0.##}%, for good. Repeating one adds nothing."); sb.AppendLine("Timers, kill-task counters and stipend flags are not quests and do not count."); sb.AppendLine(); sb.AppendLine("Radiance mirrors experience, so the bonus raises it too."); return new[] { sb.ToString().TrimEnd() }; } }