/// <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); } }