Esempio n. 1
0
        public void ChangeOpponent()
        {
            Mobile agro, best = null;
            double distance, random = Utility.RandomDouble();

            if (random < 0.75)
            {
                // find random target relatively close
                for (int i = 0; i < Aggressors.Count && best == null; i++)
                {
                    agro = Validate(Aggressors[i].Attacker);

                    if (agro == null)
                    {
                        continue;
                    }

                    distance = StrikingRange - GetDistanceToSqrt(agro);

                    if (distance > 0 && distance < StrikingRange - 2 && InLOS(agro.Location))
                    {
                        distance /= StrikingRange;

                        if (random < distance)
                        {
                            best = agro;
                        }
                    }
                }
            }
            else
            {
                int damage = 0;

                // find a player who dealt most damage
                for (int i = 0; i < DamageEntries.Count; i++)
                {
                    agro = Validate(DamageEntries[i].Damager);

                    if (agro == null)
                    {
                        continue;
                    }

                    distance = GetDistanceToSqrt(agro);

                    if (distance < StrikingRange && DamageEntries[i].DamageGiven > damage && InLOS(agro.Location))
                    {
                        best   = agro;
                        damage = DamageEntries[i].DamageGiven;
                    }
                }
            }

            if (best != null)
            {
                // teleport
                best.Location = BasePeerless.GetSpawnPosition(Location, Map, 1);
                best.FixedParticles(0x376A, 9, 32, 0x13AF, EffectLayer.Waist);
                best.PlaySound(0x1FE);

                Timer.DelayCall(TimeSpan.FromSeconds(1), new TimerCallback(delegate()
                {
                    // poison
                    best.ApplyPoison(this, HitPoison);
                    best.FixedParticles(0x374A, 10, 15, 5021, EffectLayer.Waist);
                    best.PlaySound(0x474);
                }));

                m_Change = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(5, 10));
            }
        }
Esempio n. 2
0
        public virtual void FinishSequence()
        {
            this.StopTimer();

            // delete perless
            if (this.m_Peerless != null)
            {
                if (this.m_Peerless.Corpse != null)
                    this.m_Peerless.Corpse.Delete();

                this.m_Peerless.Delete();
            }

            // teleport pary to exit if not already there
            for (int i = this.m_Fighters.Count - 1; i >= 0; i --)
                this.Exit(this.m_Fighters[i]);

            // delete master keys
            for (int i = this.m_MasterKeys.Count - 1; i >= 0; i --)
                this.m_MasterKeys[i].Delete();

            this.m_MasterKeys.Clear();
            this.m_Fighters.Clear();
            this.m_Pets.Clear();

            // delete any remaining helpers
            this.CleanupHelpers();

            // reset summoner, boss
            this.m_Peerless = null;
        }
Esempio n. 3
0
        public virtual void BeginSequence(Mobile from)
        {
            if (this.m_Peerless == null)
            {
                // spawn boss
                this.m_Peerless = this.Boss;

                if (this.m_Peerless != null)
                {
                    this.m_Peerless.Home = this.m_BossLocation;
                    this.m_Peerless.RangeHome = 4;
                    this.m_Peerless.MoveToWorld(this.m_BossLocation, this.Map);
                    this.m_Peerless.Altar = this;
                }
                else
                    return;

                // set deadline
                if (this.m_Timer != null)
                    this.m_Timer.Stop();

                if (this.TimeToSlay != TimeSpan.Zero)
                {
                    this.m_Deadline = DateTime.UtcNow + this.TimeToSlay;
                    this.m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5), new TimerCallback(DeadlineCheck));
                    this.m_Timer.Priority = TimerPriority.OneMinute;
                }
            }

            // teleport figters
            for (int i = 0; i < this.m_Fighters.Count; i ++)
            {
                Mobile fighter = this.m_Fighters[i];
                int counter = 1;

                if (from.InRange(fighter.Location, 5) && this.CanEnter(fighter))
                {
                    Timer.DelayCall(TimeSpan.FromSeconds(counter), new TimerStateCallback(Enter_Callback), fighter);

                    counter += 1;
                }
            }
        }
Esempio n. 4
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch ( version )
            {
                case 2:
                case 1:
                    if (reader.ReadBool())
                        this.m_Helpers = reader.ReadStrongMobileList<BaseCreature>();
                    goto case 0;
                case 0:
                    this.m_Peerless = reader.ReadMobile() as BasePeerless;
                    this.m_BossLocation = reader.ReadPoint3D();
                    this.m_TeleportDest = reader.ReadPoint3D();
                    this.m_ExitDest = reader.ReadPoint3D();

                    this.m_Deadline = reader.ReadDateTime();

                    // deserialize master keys
                    this.m_MasterKeys = reader.ReadStrongItemList();

                    // deserialize fightes
                    this.m_Fighters = reader.ReadStrongMobileList();

                    // deserialize pets
                    this.m_Pets = new Dictionary<Mobile, List<Mobile>>();
                    int count = reader.ReadInt();

                    for (int i = 0; i < count; i ++)
                        this.m_Pets.Add(reader.ReadMobile(), reader.ReadStrongMobileList());

                    if (version < 2)
                        reader.ReadBool();

                    break;
            }

            this.FinishSequence();
        }
Esempio n. 5
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
			
			m_Peerless = reader.ReadMobile() as BasePeerless;
			m_BossLocation = reader.ReadPoint3D();
			m_TeleportDest = reader.ReadPoint3D();
			m_ExitDest = reader.ReadPoint3D();
			
			m_Deadline = reader.ReadDateTime();
			
			// deserialize master keys
			m_MasterKeys = reader.ReadStrongItemList();		
				
			// deserialize fightes			
			m_Fighters = reader.ReadStrongMobileList();
				
			// deserialize pets
			m_Pets = new Dictionary<Mobile,List<Mobile>>();
			int count = reader.ReadInt();
			
			for ( int i = 0; i < count; i ++ )
				m_Pets.Add( reader.ReadMobile(), reader.ReadStrongMobileList() );
				
			m_Spawned = reader.ReadBool();
			
			FinishSequence();
		}