protected override void OnTarget(Mobile from, object targeted) { if (m_EverlastingBandage.Deleted) { return; //* Here } if (targeted is Mobile) { if (from.InRange(m_EverlastingBandage.GetWorldLocation(), EverlastingBandage.Range)) { if (BandageContext1.BeginHeal(from, (Mobile)targeted, m_EverlastingBandage is EnhancedBandage) != null) { //m_Bandage.Consume(); } } else { from.SendLocalizedMessage(500295); // You are too far away to do that. } } else if (targeted is PlagueBeastInnard) { if (((PlagueBeastInnard)targeted).OnBandage(from)) { m_EverlastingBandage.Consume(); } } else { from.SendLocalizedMessage(500970); // Bandages can not be used on that. } }
public static BandageContext1 GetContext(Mobile healer) { BandageContext1 bc = null; m_Table.TryGetValue(healer, out bc); return(bc); }
public static BandageContext1 BeginHeal(Mobile healer, Mobile patient, bool enhanced) { bool isDeadPet = (patient is BaseCreature && ((BaseCreature)patient).IsDeadPet); if (patient is Golem) { healer.SendLocalizedMessage(500970); // Bandages cannot be used on that. } else if (patient is BaseCreature && ((BaseCreature)patient).IsAnimatedDead) { healer.SendLocalizedMessage(500951); // You cannot heal that. } else if (!patient.Poisoned && patient.Hits == patient.HitsMax && !BleedAttack.IsBleeding(patient) && !isDeadPet) { healer.SendLocalizedMessage(500955); // That being is not damaged! } else if (!patient.Alive && (patient.Map == null || !patient.Map.CanFit(patient.Location, 16, false, false))) { healer.SendLocalizedMessage(501042); // Target cannot be resurrected at that location. } else if (healer.CanBeBeneficial(patient, true, true)) { healer.DoBeneficial(patient); bool onSelf = (healer == patient); int dex = healer.Dex; double seconds; double resDelay = (patient.Alive ? 0.0 : 5.0); if (onSelf) { if (Core.AOS) { seconds = 5.0 + (0.5 * ((double)(120 - dex) / 10)); // TODO: Verify algorithm } else { seconds = 9.4 + (0.6 * ((double)(120 - dex) / 10)); } } else { if (Core.AOS && GetPrimarySkill(patient) == SkillName.Veterinary) { seconds = 2.0; } else if (Core.AOS) { if (dex < 204) { seconds = 3.2 - (Math.Sin((double)dex / 130) * 2.5) + resDelay; } else { seconds = 0.7 + resDelay; } } else { if (dex >= 100) { seconds = 3.0 + resDelay; } else if (dex >= 40) { seconds = 4.0 + resDelay; } else { seconds = 5.0 + resDelay; } } } BandageContext1 context = GetContext(healer); if (context != null) { context.StopHeal(); } seconds *= 1000; context = new BandageContext1(healer, patient, TimeSpan.FromMilliseconds(seconds), enhanced); m_Table[healer] = context; if (!onSelf) { patient.SendLocalizedMessage(1008078, false, healer.Name); // : Attempting to heal you. } healer.SendLocalizedMessage(500956); // You begin applying the bandages. return(context); } return(null); }
public InternalTimer1(BandageContext1 context, TimeSpan delay) : base(delay) { m_Context = context; Priority = TimerPriority.FiftyMS; }