/// <summary>Fix the player's magic spells and mana pool to match their skill level if needed.</summary> /// <param name="player">The player to fix.</param> /// <param name="overrideMagicLevel">The magic skill level, or <c>null</c> to get it from the player.</param> public static void FixMagicIfNeeded(Farmer player, int?overrideMagicLevel = null) { // skip if player hasn't learned magic if (!Magic.LearnedMagic && overrideMagicLevel is not > 0) { return; } // get magic info int magicLevel = overrideMagicLevel ?? player.GetCustomSkillLevel(Skill.MagicSkillId); SpellBook spellBook = Game1.player.GetSpellBook(); // fix mana pool { int expectedPoints = magicLevel * MagicConstants.ManaPointsPerLevel; if (player.GetMaxMana() < expectedPoints) { player.SetMaxMana(expectedPoints); player.AddMana(expectedPoints); } } // fix spell bars if (spellBook.Prepared.Count < MagicConstants.SpellBarCount) { spellBook.Mutate(data => { while (spellBook.Prepared.Count < MagicConstants.SpellBarCount) { data.Prepared.Add(new PreparedSpellBar()); } }); } // fix learned spells foreach (string spellId in new[] { "arcane:analyze", "arcane:magicmissle", "arcane:enchant", "arcane:disenchant" }) { spellBook.LearnSpell(spellId, 0, true); } }