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