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