コード例 #1
0
        public SkillLearnStatus TryLearnSpell(short skillId, byte level)
        {
            var spell = SpellHandler.Get((uint)(skillId + level * 1000));

            if (spell == null || level <= 0)
            {
                return(SkillLearnStatus.Fail);
            }
            if (spell.LearnLevel > OwnerChar.Level)
            {
                return(SkillLearnStatus.LowLevel);
            }
            if (spell.ClassMask != Asda2ClassMask.All && !spell.ClassMask.HasFlag(OwnerChar.Asda2ClassMask))
            {
                return(SkillLearnStatus.BadProffession);
            }

            if (spell.ProffNum > OwnerChar.RealProffLevel)
            {
                return(SkillLearnStatus.BadProffession);
            }
            if (AvalibleSkillPoints <= 0)
            {
                return(SkillLearnStatus.NotEnoghtSpellPoints);
            }
            if (!OwnerChar.SubtractMoney((uint)spell.Cost))
            {
                return(SkillLearnStatus.NotEnoghtMoney);
            }
            if (level > 1)
            {
                var previusLvlSpell = this.FirstOrDefault(s => s.RealId == skillId);
                if (previusLvlSpell == null || previusLvlSpell.Level != spell.Level - 1)
                {
                    return(SkillLearnStatus.BadSpellLevel);
                }
                Replace(previusLvlSpell, spell);
                return(SkillLearnStatus.Ok);
            }
            AddSpell(spell, true);
            OwnerChar.SendMoneyUpdate();
            return(SkillLearnStatus.Ok);
        }
コード例 #2
0
        public SkillLearnStatus TryLearnSpell(short skillId, byte level)
        {
            Spell spell = SpellHandler.Get((uint)skillId + level * 1000U);

            if (spell == null || level <= 0)
            {
                return(SkillLearnStatus.Fail);
            }
            if (spell.LearnLevel > OwnerChar.Level)
            {
                return(SkillLearnStatus.LowLevel);
            }
            if (spell.ClassMask != Asda2ClassMask.All &&
                !spell.ClassMask.HasFlag(OwnerChar.Asda2ClassMask) ||
                spell.ProffNum > OwnerChar.RealProffLevel)
            {
                return(SkillLearnStatus.JoblevelIsNotHighEnought);
            }
            if (AvalibleSkillPoints <= 0)
            {
                return(SkillLearnStatus.NotEnoghtSpellPoints);
            }
            if (!OwnerChar.SubtractMoney((uint)spell.Cost))
            {
                return(SkillLearnStatus.NotEnoghtMoney);
            }
            AchievementProgressRecord progressRecord = OwnerChar.Achievements.GetOrCreateProgressRecord(1U);

            ++progressRecord.Counter;
            if (progressRecord.Counter == 45U)
            {
                switch (OwnerChar.Profession)
                {
                case Asda2Profession.Warrior:
                    OwnerChar.DiscoverTitle(Asda2TitleId.ofBattle24);
                    break;

                case Asda2Profession.Archer:
                    OwnerChar.DiscoverTitle(Asda2TitleId.ofArchery25);
                    break;

                case Asda2Profession.Mage:
                    OwnerChar.DiscoverTitle(Asda2TitleId.ofMagic26);
                    break;
                }
            }

            if (progressRecord.Counter > 90U)
            {
                switch (OwnerChar.Profession)
                {
                case Asda2Profession.Warrior:
                    OwnerChar.GetTitle(Asda2TitleId.ofBattle24);
                    break;

                case Asda2Profession.Archer:
                    OwnerChar.GetTitle(Asda2TitleId.ofArchery25);
                    break;

                case Asda2Profession.Mage:
                    OwnerChar.GetTitle(Asda2TitleId.ofMagic26);
                    break;
                }
            }

            progressRecord.SaveAndFlush();
            if (level > 1)
            {
                Spell oldSpell = this.FirstOrDefault(s => (int)s.RealId == (int)skillId);
                if (oldSpell == null || oldSpell.Level != spell.Level - 1)
                {
                    return(SkillLearnStatus.BadSpellLevel);
                }
                Replace(oldSpell, spell);
                return(SkillLearnStatus.Ok);
            }

            AddSpell(spell, true);
            OwnerChar.SendMoneyUpdate();
            return(SkillLearnStatus.Ok);
        }