public virtual Spell CheckCastHealingSpell() { // Summoned creatures never heal themselves. if (m_Mobile.Summoned) { return(null); } if (m_Mobile.Controlled) { if (DateTime.UtcNow < m_NextHealTime) { return(null); } } if (m_Mobile.Skills[SkillName.Chivalry].Value * 0.0005 < Utility.RandomDouble()) { return(null); } Spell spell = null; if (m_Mobile.Hits < (m_Mobile.HitsMax - 10)) { spell = new CloseWoundsSpell(m_Mobile, null); } double delay; if (m_Mobile.Int >= 500) { delay = Utility.RandomMinMax(7, 10); } else { delay = Math.Sqrt(600 - m_Mobile.Int); } m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds(delay); return(spell); }
public bool TryToHeal() { if (this.m_Mobile.Summoned) { return(false); } else if (DateTime.UtcNow < this.m_NextHealTime) { return(false); } int diff = this.m_Mobile.HitsMax - this.m_Mobile.Hits; diff = ((this.m_Mobile.HitsMax * (100 - diff)) / 100); diff = 100 - diff; if ((int)(Utility.RandomDouble() * 100.0) > diff) { return(false); } Spell spell = null; this.m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds(20); if (this.m_CanUseMagery) { if (this.m_Mobile.Poisoned) { spell = new CureSpell(this.m_Mobile, null); } spell = new GreaterHealSpell(this.m_Mobile, null); if (spell == null) { spell = new HealSpell(this.m_Mobile, null); } } else if (this.m_CanUseNecromancy) { this.m_Mobile.UseSkill(SkillName.SpiritSpeak); this.m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds(10); } else if (this.m_CanUseChivalry) { if (this.m_Mobile.Poisoned) { spell = new CleanseByFireSpell(this.m_Mobile, null); } else { spell = new CloseWoundsSpell(this.m_Mobile, null); } } else if (this.m_CanUseMystic) { spell = new CleansingWindsSpell(this.m_Mobile, null); } else if (this.m_Mobile.Skills[SkillName.Healing].Value > 10.0) { int delay = (int)(5.0 + (0.5 * ((120 - this.m_Mobile.Dex) / 10))); new BandageContext(this.m_Mobile, this.m_Mobile, TimeSpan.FromSeconds(delay), false); this.m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds(delay + 1); return(true); } if (spell != null) { spell.Cast(); } return(true); }