Esempio n. 1
0
        /// <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 &lt;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);
            }
        }