public void OnSlice() { if (!m_Active || Deleted) { return; } if (m_Champion != null) { if (m_Champion.Deleted) { RegisterDamageTo(m_Champion); if (m_Champion is BaseChampion) { AwardArtifact(((BaseChampion)m_Champion).GetArtifact()); } m_DamageEntries.Clear(); if (m_Altar != null) { m_Altar.Hue = 0x455; if (m_Altar.Map == Map.Felucca) { new StarRoomGate(true, m_Altar.Location, m_Altar.Map); } } m_Champion = null; Stop(); m_HasBeenAdvanced = false; BeginRestart(m_RestartDelay); } else { if (m_Champion.Region != m_Region) { m_Champion.MoveToWorld(new Point3D(X, Y, Z - 15), Map); } } } else { int kills = m_Kills; for (int i = 0; i < m_Creatures.Count; ++i) { Mobile creature = m_Creatures[i]; if (creature.Deleted) { if (creature.Corpse != null && !creature.Corpse.Deleted) { ((Corpse)creature.Corpse).BeginDecay(TimeSpan.FromMinutes(1.0)); } m_Creatures.RemoveAt(i); --i; ++m_Kills; RegisterDamageTo(creature); Mobile killer = creature.FindMostRecentDamager(false); if (killer is BaseCreature) { killer = ((BaseCreature)killer).GetMaster(); } if (killer is PlayerMobile && killer.Alive && killer.Region == m_Region) { if (creature.Fame > Utility.Random(1000000)) { if (Map == Map.Felucca && Utility.RandomBool()) { PowerScroll ps = PowerScroll.CreateRandomNoCraft(5, 5); ps.LootType = LootType.Blessed; killer.SendLocalizedMessage(1049524); // You have received a scroll of power! killer.AddToBackpack(ps); } else { ScrollOfTranscendence sot; if (this.Map.Rules == MapRules.FeluccaRules) { sot = ScrollOfTranscendence.CreateRandom(6, 10); } else { sot = ScrollOfTranscendence.CreateRandom(1, 5); } killer.SendLocalizedMessage(1094936); // You have received a Scroll of Transcendence! killer.AddToBackpack(sot); } } int mobSubLevel = GetSubLevelFor(creature) + 1; if (mobSubLevel >= 0) { bool gainedPath = false; int pointsToGain = mobSubLevel * 40; if (VirtueHelper.Award(killer, VirtueName.Valor, pointsToGain, ref gainedPath)) { if (gainedPath) { killer.SendLocalizedMessage(1054032); // You have gained a path in Valor! } else { killer.SendLocalizedMessage(1054030); // You have gained in Valor! } // No delay on Valor gains } } #region Champion Monster Titles int type = -1; switch (m_Type) { case ChampionSpawnType.ColdBlood: type = 0; break; case ChampionSpawnType.ForestLord: type = 1; break; case ChampionSpawnType.Arachnid: type = 2; break; case ChampionSpawnType.Abyss: type = 3; break; case ChampionSpawnType.VerminHorde: type = 4; break; case ChampionSpawnType.UnholyTerror: type = 5; break; case ChampionSpawnType.SleepingDragon: type = 6; break; case ChampionSpawnType.Corrupt: type = 7; break; case ChampionSpawnType.Glade: type = 8; break; case ChampionSpawnType.Unliving: type = 9; break; case ChampionSpawnType.Pit: type = 10; break; } BaseCreature bc = creature as BaseCreature; if (bc != null && type != -1) { bc.CalculateTitlesScore((PlayerMobile)killer, bc.SpawnLevel, type); } #endregion } } } // Only really needed once. if (m_Kills > kills) { InvalidateProperties(); } double n = m_Kills / (double)MaxKills; int p = (int)(n * 100); if (p >= 90) { AdvanceLevel(); } else if (p > 0) { SetWhiteSkullCount(p / 20); } if (DateTime.Now >= m_ExpireTime) { Expire(); } if (DateTime.Now >= m_KickTime) { KickGhosts(); } Respawn(); } }