| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System.Drawing;
- using Server.MirDatabase;
- using S = ServerPackets;
- namespace Server.MirObjects.Monsters
- {
- public class DigOutZombie : MonsterObject
- {
- public bool Visible, DoneDigOut;
- public long VisibleTime, DigOutTime;
- public Point DigOutLocation;
- public MirDirection DigOutDirection;
- protected override bool CanAttack
- {
- get
- {
- return Visible && base.CanAttack;
- }
- }
- protected override bool CanMove
- {
- get
- {
- return Visible && base.CanMove;
- }
- }
- public override bool Blocking
- {
- get
- {
- return Visible && base.Blocking;
- }
- }
- protected internal DigOutZombie(MonsterInfo info)
- : base(info)
- {
- Visible = false;
- }
- protected override void ProcessAI()
- {
- if (!Dead && Envir.Time > VisibleTime)
- {
- VisibleTime = Envir.Time + 2000;
- bool visible = FindNearby(3);
- if (!Visible && visible)
- {
- Visible = true;
- CellTime = Envir.Time + 500;
- Broadcast(GetInfo());
- Broadcast(new S.ObjectShow { ObjectID = ObjectID });
- ActionTime = Envir.Time + 2000;
- DigOutTime = Envir.Time;
- DigOutLocation = CurrentLocation;
- DigOutDirection = Direction;
- }
- }
- SpawnDigOutEffect();
- base.ProcessAI();
- }
- protected virtual void SpawnDigOutEffect()
- {
- if (Visible && Envir.Time > DigOutTime + 1000 && !DoneDigOut)
- {
- SpellObject ob = new SpellObject
- {
- Spell = Spell.DigOutZombie,
- Value = 1,
- ExpireTime = Envir.Time + (5 * 60 * 1000),
- TickSpeed = 2000,
- Caster = null,
- CurrentLocation = DigOutLocation,
- CurrentMap = this.CurrentMap,
- Direction = DigOutDirection
- };
- CurrentMap.AddObject(ob);
- ob.Spawned();
- DoneDigOut = true;
- }
- }
- public override bool Walk(MirDirection dir)
- {
- return Visible && base.Walk(dir);
- }
- public override bool IsAttackTarget(MonsterObject attacker)
- {
- return Visible && base.IsAttackTarget(attacker);
- }
- public override bool IsAttackTarget(HumanObject attacker)
- {
- return Visible && base.IsAttackTarget(attacker);
- }
- protected override void ProcessSearch()
- {
- if (Visible)
- {
- base.ProcessSearch();
- }
- }
- public override Packet GetInfo()
- {
- return !Visible ? null : base.GetInfo();
- }
- }
- }
|