using System; using System.Collections.Generic; using System.Linq; using System.Text; using ACE.Server.WorldObjects; namespace ACE.Server.Entity { /// /// Tracks top damager /// public class AttackList { public Dictionary Damagers; public AttackList() { Init(); } public AttackList(List attackDamages) { Init(); foreach (var attackDamage in attackDamages) Add(attackDamage.Source, attackDamage.Amount); } public void Init() { Damagers = new Dictionary(); } public void Add(WorldObject damager, uint amount) { if (Damagers.ContainsKey(damager)) Damagers[damager] += amount; else Damagers.Add(damager, amount); } public WorldObject TopDamager { get { var sorted = Damagers.OrderByDescending(wo => wo.Value); return sorted.FirstOrDefault().Key; } } /// /// Called when an AttackTarget regains health /// /// The amount of health restored /// The amount of health that was missing before healing public void OnHeal(int healAmount, int missingHealth) { // on heal, scale the damage from each source by 1 - healAmount / missingHealth var scalar = 1.0f - healAmount / missingHealth; foreach (var damager in Damagers.Keys) Damagers[damager] *= (uint)Math.Round(scalar); } } }