 public void IncreaseExperience(ulong experience, bool addMultiple)
        {
            if (Map.BaseID == 1039) return;
            if (Player.ContainsFlag((ulong)MsgUpdate.Flags.Cursed)) return;
            if (Player.Dead) return;
            byte level = Player.Level;
            ulong _experience = Player.Experience;
            ulong prExperienece = experience;
            if (addMultiple)
            {
               
                if (Player.VIPLevel > 0)
                    experience *= 3;
                if (Server.Today == DayOfWeek.Saturday || Server.Today == DayOfWeek.Sunday ||
                    Server.Today == DayOfWeek.Monday || Server.Today == DayOfWeek.Thursday ||
                    Server.Today == DayOfWeek.Tuesday || Server.Today == DayOfWeek.Wednesday ||
                    Server.Today == DayOfWeek.Friday)
                    experience *= 2;
                experience *= Constants.ExtraExperienceRate;
                experience += experience * Player.Gems[3] / 100;
                if (Player.DoubleExperienceTime > 0)
                    experience *= 2;
                
                if (Player.HeavenBlessing > 0)
                    experience += (uint)(experience * 20 / 100);
                if (Player.Reborn >= 2)
                    experience /= 3;
                if (Map.BaseID == 1039)
                    experience /= 50;
                if (Guild != null)
                {
                    if (Guild.Level > 0)
                    {
                        experience += (ushort)(experience * Guild.Level / 100);
                    }
                }
                prExperienece = experience + (ulong)(experience * ((float)Player.BattlePower / 100));
                _experience += prExperienece;
            }
            else
                _experience += experience;
            if (Player.Level < 140 && Player.InAutoHunt == true)
            {
                Player.AutoHuntEXP += experience;
                return;
            }
            else if (Player.Level == 140 && Player.InAutoHunt == true)
            {
                Player.AutoHuntEXP = 0;
                return;
            }
            if (Player.Level < 140)
            {
                if (Player.InAutoHunt)
                {
                    Player.AutoHuntEXP += experience;
                }
                while (_experience >= Database.DataHolder.LevelExperience(level) && level < 140)
                {
                    _experience -= Database.DataHolder.LevelExperience(level);
                    level++;
                    if (Player.Reborn == 1)
                    {
                        if (level >= 130 && Player.FirstRebornLevel > 130 && level < Player.FirstRebornLevel)
                            level = Player.FirstRebornLevel;
                    }
                    else if (Player.Reborn == 2)
                    {
                        if (level >= 130 && Player.SecondRebornLevel > 130 && level < Player.SecondRebornLevel)
                            level = Player.SecondRebornLevel;
                    }

                        if (Player.Class >= 10 && Player.Class <= 15)
                        if (!Spells.ContainsKey(1110))
                            AddSpell(new MsgMagicInfo(true) { ID = 1110 });
                    if (Player.Class >= 20 && Player.Class <= 25)
                        if (!Spells.ContainsKey(1020))
                            AddSpell(new MsgMagicInfo(true) { ID = 1020 });
                    if (Player.Class >= 40 && Player.Class <= 45)
                        if (!Spells.ContainsKey(8002))
                            AddSpell(new MsgMagicInfo(true) { ID = 8002 });
                    if (Player.Class >= 50 && Player.Class <= 55)
                        if (!Spells.ContainsKey(6011))
                            AddSpell(new MsgMagicInfo(true) { ID = 6011 });
                    if (Player.Class >= 60 && Player.Class <= 65)
                        if (!Spells.ContainsKey(10490))
                            AddSpell(new MsgMagicInfo(true) { ID = 10490 });
                    if (Mentor != null)
                    {
                        if (Mentor.IsOnline)
                        {
                            uint exExp = (uint)(level * 2);
                            Mentor.Client.PrizeExperience += exExp;
                            Mentor.Client.PrizeHeavenBlessing += 1;
                            Mentor.Client.PrizePlusStone += 1;
                            AsApprentice = Mentor.Client.Apprentices[Player.UID];
                            if (AsApprentice != null)
                            {
                                AsApprentice.Actual_Experience += exExp;
                                AsApprentice.Total_Experience += exExp;
                                AsApprentice.Actual_Plus += 1;
                                AsApprentice.Total_Plus += 1;
                                AsApprentice.Actual_HeavenBlessing += 1;
                                AsApprentice.Total_HeavenBlessing += 1;
                            }
                            if (Mentor.Client.PrizeExperience > 50 * 606)
                                Mentor.Client.PrizeExperience = 50 * 606;
                            Database.KnownPersons.SaveApprenticeInfo(AsApprentice);
                        }
                    }
                    if (level == 70)
                    {
                        if (ArenaStatistic == null || ArenaStatistic.EntityID == 0)
                        {
                            ArenaStatistic = new MsgQualifyingDetailInfo(true);
                            ArenaStatistic.EntityID = Player.UID;
                            ArenaStatistic.Name = Player.Name;
                            ArenaStatistic.Level = Player.Level;
                            ArenaStatistic.Class = Player.Class;
                            ArenaStatistic.Model = Player.Mesh;
                            ArenaPoints = Database.ArenaTable.ArenaPointFill(Player.Level);
                            ArenaStatistic.LastArenaPointFill = DateTime.Now;
                            Database.ArenaTable.InsertArenaStatistic(this);
                            ArenaStatistic.Status = MsgQualifyingDetailInfo.NotSignedUp;
                            Game.Qualifier.ArenaStatistics.Add(Player.UID, ArenaStatistic);
                        }
                    }
                    if (Player.Reborn == 0)
                    {
                        if (level <= 120)
                        {
                            Database.DataHolder.GetStats(Player.Class, level, this);
                            CalculateStatBonus();
                            CalculateHPBonus();
                            GemAlgorithm();
                        }
                        else
                            Player.Atributes += 3;
                    }
                    else
                    {
                        Player.Atributes += 3;
                    }
                }
                #region Auto Promotion [Desha]
                byte[] levels = new byte[] { 15, 40, 70, 100, 110 };
                for (int i = 0; i < levels.Length; i++)
                {
                    int b = i + 1;
                    if ((level >= levels[i] && Player.Level < levels[i]) || (Player.Class % 10 < b && level >= levels[i]))
                    {
                        if (Player.Class == 101) break;//Taoist
                        if (Player.Class % 10 < 5)
                            Player.Class++;
                    }
                }