ModernUO/Projects/UOContent/Items/Skill Items/Magical/Potions/Heal Potions/BaseHealPotion.cs
Kamron Batman 38731d98b6
fix: Fixes splitting potions before error (#1862)
### Summary

Most potions have various checks, such as a cooldown. This fixes an edge case where potions get split from their stack before erroring.
2024-07-06 16:39:47 -07:00

64 lines
1.6 KiB
C#

using System;
using ModernUO.Serialization;
namespace Server.Items;
[SerializationGenerator(0, false)]
public abstract partial class BaseHealPotion : BasePotion
{
public BaseHealPotion(PotionEffect effect) : base(0xF0C, effect)
{
}
public abstract int MinHeal { get; }
public abstract int MaxHeal { get; }
public abstract double Delay { get; }
public void DoHeal(Mobile from)
{
var min = Scale(from, MinHeal);
var max = Scale(from, MaxHeal);
from.Heal(Utility.RandomMinMax(min, max));
}
public override bool CanDrink(Mobile from)
{
if (!base.CanDrink(from))
{
return false;
}
if (from.Hits >= from.HitsMax)
{
// You decide against drinking this potion, as you are already at full health.
from.SendLocalizedMessage(1049547);
return false;
}
if (from.Poisoned || MortalStrike.IsWounded(from))
{
// You can not heal yourself in your current state.
from.LocalOverheadMessage(MessageType.Regular, 0x22, 1005000);
return false;
}
if (!from.BeginAction<BaseHealPotion>())
{
// You must wait 10 seconds before using another healing potion.
from.LocalOverheadMessage(MessageType.Regular, 0x22, 500235);
return false;
}
return true;
}
public override void Drink(Mobile from)
{
DoHeal(from);
PlayDrinkEffect(from);
Timer.StartTimer(TimeSpan.FromSeconds(Delay), from.EndAction<BaseHealPotion>);
}
}