コード例 #1
0
ファイル: Magic.cs プロジェクト: Pathoschild/smapi-mod-dump
        /// <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);
            }
        }