Hugger.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Server.MirDatabase;
  2. using Server.MirEnvir;
  3. namespace Server.MirObjects.Monsters
  4. {
  5. public class Hugger : MonsterObject
  6. {
  7. public long ExplosionTime;
  8. protected internal Hugger(MonsterInfo info)
  9. : base(info)
  10. {
  11. ExplosionTime = Envir.Time + 1000 * 60 * 5;
  12. }
  13. protected override void ProcessTarget()
  14. {
  15. if (!CanAttack) return;
  16. if (Target == null)
  17. {
  18. Die(); return;
  19. }
  20. if (Envir.Time > ExplosionTime)
  21. {
  22. Die(); return;
  23. }
  24. if (InAttackRange())
  25. {
  26. Attack();
  27. if (Target.Dead)
  28. Die();
  29. return;
  30. }
  31. if (Envir.Time < ShockTime)
  32. {
  33. Target = null;
  34. return;
  35. }
  36. MoveTo(Target.CurrentLocation);
  37. }
  38. public override void Die()
  39. {
  40. ActionList.Add(new DelayedAction(DelayedType.Die, Envir.Time + 500));
  41. base.Die();
  42. }
  43. protected override void CompleteDeath(IList<object> data)
  44. {
  45. List<MapObject> targets = FindAllTargets(1, CurrentLocation, false);
  46. if (targets.Count == 0) return;
  47. for (int i = 0; i < targets.Count; i++)
  48. {
  49. int damage = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]);
  50. if (damage == 0) return;
  51. if (targets[i].Attacked(this, damage, DefenceType.ACAgility) <= 0) return;
  52. PoisonTarget(targets[i], 5, 5, PoisonType.Green, 2000);
  53. }
  54. }
  55. }
  56. }