예제 #1
0
		/// <summary>
		/// Distributes the given amount of XP over the group of the given Character (or adds it only to the Char, if not in Group).
		/// </summary>
		/// <remarks>Requires Region-Context.</remarks>
		/// <param name="chr"></param>
		public static void DistributeCombatXp(Character chr, INamed killed, int xp)
		{
			var groupMember = chr.GroupMember;
			if (groupMember != null)
			{
				var members = new List<Character>();
				var highestLevel = 0;
				var totalLevels = 0;
				groupMember.IterateMembersInRange(WorldObject.BroadcastRange,
					member => {
						var memberChar = member.Character;
						if (memberChar != null)
						{
							totalLevels += memberChar.Level;
							if (memberChar.Level > highestLevel)
							{
								highestLevel = memberChar.Level;
							}
							members.Add(memberChar);
						}
					});

				foreach (var member in members)
				{
					var share = MathUtil.Divide(xp * member.Level, totalLevels);
					member.GainCombatXp(share, killed, true);
				}
			}
			else
			{
				chr.GainCombatXp(xp, killed, true);
			}
		}