示例#1
0
        public virtual void DoDie(Character killer = null, SkillId skillId = 0)
        {
            if (killer != null)
            {
                killer.OnKill(this, skillId);
            }

            int count = Skills.Skills.Count;

            for (int i = 0; i < count; i++)
            {
                Skills.Skills[i].NotifyCharacterDied();
            }

            if (ActiveEffects.Count > 0)
            {
                foreach (SkillEffect ef in ActiveEffects.ToArray())
                {
                    ef.OnCharDie();
                }
            }

            OnDead(killer, skillId);

            if (this is Monster)
            {
                MonsterTemplate mt = ((Monster)this).Template;
                mt.OnDie((Monster)this);
            }

            GetData().SetIsDead(true);
            WorldHolder.instance.activeMap.NotifyCharacterDied(this);
            DeleteMe();
        }
示例#2
0
        public override void DoDie(Character killer = null, SkillId skillId = SkillId.SkillTemplate)
        {
            //base.DoDie(killer, skillId);

            Lifes--;

            // notify upgrades on dead - TODO add a hook here to maybe ressurect player
            OnDead(killer, skillId);

            //GetData().SetIsDead(true);
            WorldHolder.instance.activeMap.NotifyCharacterDied(this);

            try
            {
                foreach (Skill sk in Skills.Skills)
                {
                    if (sk is ActiveSkill)
                    {
                        if (((ActiveSkill)sk).IsActive() || ((ActiveSkill)sk).IsBeingCasted())
                        {
                            ((ActiveSkill)sk).AbortCast();
                        }
                    }
                }
            }
            catch (Exception)
            {
            }

            RemoveAllSummons();

            foreach (SkillEffect eff in ActiveEffects.ToArray())
            {
                RemoveEffect(eff);
            }

            if (Lifes == 0)
            {
                GameSystem.Instance.Controller.RestartGame();
            }
            else
            {
                GameSystem.Instance.Controller.PlayerDied();
            }
        }
示例#3
0
        public void ReceiveDamage(Character source, int damage, SkillId skillId = 0, bool wasCrit = false)
        {
            if (Status.IsDead || damage <= 0)
            {
                return;
            }

            int shieldReduction = (int)(damage * Status.Shield - damage);

            damage -= shieldReduction;

            if (this is Player)
            {
                ((Player)this).GetData().ui.DamageMessage(GetData().GetBody(), damage, Color.red);
            }

            if (ActiveEffects.Count > 0)
            {
                foreach (SkillEffect ef in ActiveEffects.ToArray())
                {
                    ef.OnReceiveDamage(source, damage, skillId, wasCrit);
                }
            }

            Status.ReceiveDamage(damage);

            if (source != null)
            {
                source.OnGiveDamage(this, damage, skillId, wasCrit);
            }

            if (Status.IsDead)
            {
                DoDie(source, skillId);
            }

            GetData().ReceivedDamage(damage, wasCrit);

            GetData().SetVisibleHp(Status.Hp);

            AI.AddAggro(source, damage * 5);
        }