示例#1
0
        public override void FireEvent()
        {
            // Mob has changed target
            if (this.currenttarget != mob.Target)
            {
                client = (WorldClient)WorldServer.GetClientByCharacterID((uint)this.mob.Target);
                if (client == null)
                {
                    this.mob.StopCombat();
                }
                else
                {
                    this.currenttarget = mob.Target;
                }
            }
            //Console.WriteLine("ChasingEvent.FireEvent (" + (client != null ? client.Player.Name : "") + "): " + mob.Name);

            if (client != null && client.Player.InWorld && !client.Player.Dead && !mob.Dead)
            {
                try
                {
                    float distance = client.Player.Position.Distance(mob.Position);
                    //				if(distance > 4)
                    //				{
                    int          time = (int)((distance / mob.RunningSpeed) * 1000);
                    ServerPacket pkg  = new ServerPacket(SMSG.MONSTER_MOVE);
                    pkg.Write((char)0xFF);
                    pkg.Write(mob.GUID);
                    pkg.WriteVector(mob.Position);
                    pkg.Write(mob.Facing);
                    pkg.Write((byte)0);
                    pkg.Write(0x100);
                    pkg.Write(time);
                    pkg.Write(1);
                    if (client != null && client.Player != null)
                    {
                        mob.Position.Translate(client.Player.Position, 1.5f - (client.Player.Position.Distance(client.Player.LastPosition) * 0.5f));
                    }

                    pkg.Write(mob.Position.X);
                    pkg.Write(mob.Position.Y);
                    pkg.Write(mob.Position.Z);
                    pkg.Finish();
                    mob.MapTile.SendSurrounding(pkg);
                    mob.UpdateData();
                    client.Player.UpdateData();
                }
                catch (Exception exp)
                {
                    DebugLogger.Logger.Log("", exp);
                }
                //				eventTime = DateTime.Now.Add(TimeSpan.FromSeconds(1));
                //				EventManager.AddEvent(this);
            }
        }
示例#2
0
        public override void FireEvent()
        {
            if (!m_mobs.Dead && m_mobs.Health < m_mobs.MaxHealth)
            {
                //Console.WriteLine("MobsRegenEvent.FireEvent: " + m_mobs.Name);

                StatManager.CalculateRegenTick(m_mobs);
                m_mobs.UpdateData();
                eventTime = DateTime.Now.Add(TimeSpan.FromSeconds(3));
                EventManager.AddEvent(this);
            }
            else
            {
                m_mobs.MobsRegenEvent = null;
            }
        }