/// <summary> /// Grants EoC for: /// <para>getting damaged by a player or NPC</para> /// <para>getting knocked out</para> /// <para>knocking out another player</para> /// <para> </para> /// <para>Also starts the <code>HitsTable</code> to trigger <5% HP EoC generation</para> /// </summary> private static void OnDamaged(PlayerDamagedEventArgs args) { Mobile aggr = args.Aggressor; Player p = args.Player; if (aggr != null) { if (p.Guild != null && !p.Guild.Disbanded && p.Guild == aggr.Guild) { return; } if (p.Party != null && p.Party == aggr.Party) { return; } p.EssenceOfCharacter += Math.Max(1, (args.DamageAmount / 10)); if (args.WillKill) { if (aggr is Player) { int change = (int)(p.SkillsTotal / aggr.SkillsTotal) * 10; ((Player)aggr).EssenceOfCharacter += change; p.EssenceOfCharacter += change; } else { int count = 0; for (int i = 0; i < p.Aggressed.Count; i++) { if (AttackMessage.CheckAggressions(p, p.Aggressed[i].Defender)) { count++; } } for (int i = 0; i < p.Aggressors.Count; i++) { if (AttackMessage.CheckAggressions(p, p.Aggressors[i].Attacker)) { count++; } } p.EssenceOfCharacter += Math.Max(50, (50 * count)); } } } if (p.Hits < (int)(p.HitsMax * 0.05)) { if (!HitsTable.ContainsKey(p)) { HitsTable[p] = new HitsTimer(p); HitsTable[p].Start(); } else if (!HitsTable[p].Running) { HitsTable[p].Start(); } } else if (HitsTable.ContainsKey(p)) { HitsTable[p].Stop(); HitsTable.Remove(p); } }