public void IncreaseSpellExperience(uint experience, ushort id) { if (Spells.ContainsKey(id)) { switch (id) { case 1290: case 5030: case 7030: experience = 100; break; } experience *= ServerBase.Constants.ExtraSpellRate; experience += experience * Entity.Gems[6] / 100; if (Map.BaseID == 1039) experience /= 40; Interfaces.ISkill spell = Spells[id]; if (spell == null) return; if (Entity.VIPLevel > 0) { experience *= 5; } Database.SpellInformation spellInfo = Database.SpellTable.SpellInformations[spell.ID][spell.Level]; if (spellInfo != null) { if (spellInfo.NeedExperience != 0 && Entity.Level >= spellInfo.NeedLevel) { spell.Experience += experience; bool leveled = false; if (spell.Experience >= spellInfo.NeedExperience) { spell.Experience = 0; spell.Level++; leveled = true; Send(ServerBase.Constants.SpellLeveled); } if (leveled) { spell.Send(this); } else { Network.GamePackets.SkillExperience update = new SkillExperience(true); update.AppendSpell(spell.ID, spell.Experience); update.Send(this); } } } } }
public void IncreaseProficiencyExperience(uint experience, ushort id) { if (Proficiencies.ContainsKey(id)) { Interfaces.IProf proficiency = Proficiencies[id]; experience *= ServerBase.Constants.ExtraProficiencyRate; experience += experience * Entity.Gems[5] / 100; if (Map.BaseID == 1039) experience /= 40; if (Entity.VIPLevel > 0) { experience *= 5; } proficiency.Experience += experience; if (proficiency.Level < 20) { bool leveled = false; while (proficiency.Experience >= Database.DataHolder.ProficiencyLevelExperience(proficiency.Level)) { proficiency.Experience -= Database.DataHolder.ProficiencyLevelExperience(proficiency.Level); proficiency.Level++; if (proficiency.Level == 20) { proficiency.Experience = 0; proficiency.Send(this); Send(ServerBase.Constants.ProficiencyLeveled); return; } leveled = true; Send(ServerBase.Constants.ProficiencyLeveled); } if (leveled) { proficiency.Send(this); } else { Network.GamePackets.SkillExperience update = new SkillExperience(true); update.AppendProficiency(proficiency.ID, proficiency.Experience, Database.DataHolder.ProficiencyLevelExperience(proficiency.Level)); update.Send(this); } } } else { AddProficiency(new Network.GamePackets.Proficiency(true) { ID = id }); } }