public void IncreaseExperience(ulong experience, bool addMultiple) { if (Entity.Dead) return; byte level = Entity.Level; ulong _experience = Entity.Experience; ulong prExperienece = experience; if (addMultiple) { if (Entity.VIPLevel > 0) experience *= 3; if (Program.Today == DayOfWeek.Saturday || Program.Today == DayOfWeek.Sunday || Program.Today == DayOfWeek.Monday || Program.Today == DayOfWeek.Thursday || Program.Today == DayOfWeek.Tuesday || Program.Today == DayOfWeek.Wednesday || Program.Today == DayOfWeek.Friday) experience *= 8; experience *= ServerBase.Constants.ExtraExperienceRate; experience += experience * Entity.Gems[3] / 100; if (Entity.DoubleExperienceTime > 0) experience *= 2; if (Entity.HeavenBlessing > 0) experience += (uint)(experience * 20 / 100); if (Entity.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)Entity.BattlePower / 100)); _experience += prExperienece; } else _experience += experience; if (Entity.Level < 140) { while (_experience >= Database.DataHolder.LevelExperience(level) && level < 140) { _experience -= Database.DataHolder.LevelExperience(level); level++; if (Entity.Reborn == 1) { if (level >= 130 && Entity.FirstRebornLevel > 130 && level < Entity.FirstRebornLevel) level = Entity.FirstRebornLevel; } else if (Entity.Reborn == 2) { if (level >= 130 && Entity.SecondRebornLevel > 130 && level < Entity.SecondRebornLevel) level = Entity.SecondRebornLevel; } if (Entity.Class >= 10 && Entity.Class <= 15) if (!Spells.ContainsKey(0x456)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x456 }); if (Entity.Class >= 50 && Entity.Class <= 55) if (!Spells.ContainsKey(11230)) AddSpell(new Network.GamePackets.Spell(true) { ID = 11230 }); if (Entity.Class >= 20 && Entity.Class <= 25) if (!Spells.ContainsKey(0x401)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x401 }); if (Entity.Class >= 40 && Entity.Class <= 45) if (!Spells.ContainsKey(0x1f42)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x1f42 }); if (Entity.Class >= 50 && Entity.Class <= 55) if (!Spells.ContainsKey(0x177b)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x177b }); if (Entity.Class >= 60 && Entity.Class <= 65) if (!Spells.ContainsKey(0x2896)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x2896 }); if (Entity.Class >= 70 && Entity.Class <= 75) if (!Spells.ContainsKey(0x2b2a)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x2b2a }); if (Entity.Class > 100) if (!Spells.ContainsKey(0x3f2)) AddSpell(new Network.GamePackets.Spell(true) { ID = 0x3f2 }); if (Mentor != null) { if (Mentor.IsOnline) { Mentor.Client.PrizeExperience += (ulong)level; AsApprentice = Mentor.Client.Apprentices[Entity.UID]; try { AsApprentice.Actual_Experience += (ulong)level; AsApprentice.Total_Experience += (ulong)level; } catch { } if (Mentor.Client.PrizeExperience > 50 * 606) Mentor.Client.PrizeExperience = 50 * 606; } } if (level == 70) { if (ArenaStatistic == null || ArenaStatistic.EntityID == 0) { ArenaStatistic = new PhoenixProject.Network.GamePackets.ArenaStatistic(true); ArenaStatistic.EntityID = Entity.UID; ArenaStatistic.Name = Entity.Name; ArenaStatistic.Level = Entity.Level; ArenaStatistic.Class = Entity.Class; ArenaStatistic.Model = Entity.Mesh; ArenaStatistic.ArenaPoints = Database.ArenaTable.ArenaPointFill(Entity.Level); ArenaStatistic.LastArenaPointFill = DateTime.Now; Database.ArenaTable.InsertArenaStatistic(this); ArenaStatistic.Status = Network.GamePackets.ArenaStatistic.NotSignedUp; Game.ConquerStructures.Arena.ArenaStatistics.Add(Entity.UID, ArenaStatistic); } } if (Entity.Reborn == 0) { if (level <= 120) { Database.DataHolder.GetStats(Entity.Class, level, this); CalculateStatBonus(); CalculateHPBonus(); GemAlgorithm(); } else Entity.Atributes += 3; } else { Entity.Atributes += 3; } } if (Entity.Level != level) { if (Team != null) { if (Team.LowestLevelsUID == Entity.UID) { Team.LowestLevel = 0; Team.LowestLevelsUID = 0; Team.SearchForLowest(); } } Entity.Level = level; Entity.Hitpoints = Entity.MaxHitpoints; Entity.Mana = Entity.MaxMana; if (Entity.Level > 130) { Database.EntityTable.UpdateLevel(Entity.Owner); } _String str = new _String(true); str.UID = Entity.UID; str.TextsCount = 1; str.Type = _String.Effect; str.Texts.Add("xp"); SendScreen(str, true); } if (Entity.Experience != _experience) Entity.Experience = _experience; if (Entity.Reborn == 2 && Entity.Level >= 110) { if (ServerBase.Kernel.ReincarnatedCharacters.ContainsKey(Entity.UID)) Network.PacketHandler.ReincarnationHash(Entity.Owner); } } }
public void AddBless(uint value) { Entity.HeavenBlessing += value; Entity.Update(Network.GamePackets._String.Effect, "bless", true); if (Mentor != null) { if (Mentor.IsOnline) { Mentor.Client.PrizeHeavenBlessing += (ushort)(value / 10 / 60 / 60); AsApprentice = Mentor.Client.Apprentices[Entity.UID]; } if (AsApprentice != null) { AsApprentice.Actual_HeavenBlessing += (ushort)(value / 10 / 60 / 60); AsApprentice.Total_HeavenBlessing += (ushort)(value / 10 / 60 / 60); if (Time32.Now > LastMentorSave.AddSeconds(5)) { Database.KnownPersons.SaveApprenticeInfo(AsApprentice); LastMentorSave = Time32.Now; } } } }