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); }
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); }