Aura.Channel.World.Entities.NPC.Kill C# (CSharp) Method

Kill() public method

Kills NPC, rewarding the killer.
public Kill ( Creature killer ) : void
killer Creature
return void
		public override void Kill(Creature killer)
		{
			base.Kill(killer);

			this.DisappearTime = DateTime.Now.AddSeconds(NPC.DisappearDelay);

			if (killer == null)
				return;

			// Exp
			var exp = (long)(this.RaceData.Exp * ChannelServer.Instance.Conf.World.ExpRate);
			var expRule = killer.Party.ExpRule;
			var expMessage = "+{0} EXP";

			// Add global bonus
			float bonusMultiplier;
			string bonuses;
			if (ChannelServer.Instance.GameEventManager.GlobalBonuses.GetBonusMultiplier(GlobalBonusStat.CombatExp, out bonusMultiplier, out bonuses))
				exp = (long)(exp * bonusMultiplier);

			if (!string.IsNullOrWhiteSpace(bonuses))
				expMessage += " (" + bonuses + ")";

			// Give
			if (!killer.IsInParty || expRule == PartyExpSharing.AllToFinish)
			{
				killer.GiveExp(exp);
				Send.CombatMessage(killer, expMessage, exp);
			}
			else
			{
				var members = killer.Party.GetMembers();
				var eaExp = 0L;
				var killerExp = 0L;
				var killerPos = killer.GetPosition();

				// Apply optional exp bonus
				if (members.Length > 1)
				{
					var extra = members.Length - 1;
					var bonus = ChannelServer.Instance.Conf.World.PartyExpBonus;

					exp += (long)(exp * ((extra * bonus) / 100f));
				}

				// Official simply ALWAYS divides by party member total,
				// even if they cannot recieve the experience.
				if (expRule == PartyExpSharing.Equal)
				{
					eaExp = exp / members.Length;
					killerExp = eaExp;
				}
				else if (expRule == PartyExpSharing.MoreToFinish)
				{
					exp /= 2;
					eaExp = exp / members.Length;
					killerExp = exp;
				}

				// Killer's exp
				killer.GiveExp(killerExp);
				Send.CombatMessage(killer, expMessage, killerExp);

				// Exp for members in range of killer, the range is unofficial
				foreach (var member in members.Where(a => a != killer && a.GetPosition().InRange(killerPos, 3000)))
				{
					member.GiveExp(eaExp);
					Send.CombatMessage(member, expMessage, eaExp);
				}
			}
		}