feat(items): add Blood Drinker property

This commit is contained in:
Crome696 2026-07-09 08:10:12 +02:00
parent b485b843fd
commit d163761dcd
4 changed files with 466 additions and 4 deletions

View file

@ -63,11 +63,18 @@ namespace Server.Items
_table.TryGetValue(m, out var timer);
timer?.Stop();
_table[m] = timer = new InternalTimer(from, m);
var bloodDrinker = CheckBloodDrinker(from);
_table[m] = timer = new InternalTimer(from, m, bloodDrinker);
timer.Start();
}
public static void DoBleed(Mobile m, Mobile from, int level)
{
DoBleed(m, from, level, false);
}
internal static void DoBleed(Mobile m, Mobile from, int level, bool bloodDrinker)
{
if (m.Alive)
{
@ -79,7 +86,20 @@ namespace Server.Items
}
m.PlaySound(0x133);
var oldHits = m.Hits;
m.Damage(damage, from);
var applied = Math.Max(0, oldHits - m.Hits);
if (bloodDrinker && applied > 0 && from is { Deleted: false, Alive: true })
{
var oldFromHits = from.Hits;
from.Heal(applied, from, message: false);
if (from.Hits > oldFromHits)
{
from.SendLocalizedMessage(1113606); // The blood drinker effect heals you.
}
}
var blood = new Blood { ItemID = Utility.Random(0x122A, 5) };
blood.MoveToWorld(m.Location, m.Map);
@ -105,20 +125,32 @@ namespace Server.Items
}
}
internal static bool CheckBloodDrinker(Mobile from)
{
if (!Core.SA || from?.Deleted != false || !from.Alive)
{
return false;
}
return from.Weapon is BaseWeapon weapon && weapon.ExtendedWeaponAttributes.BloodDrinker != 0;
}
private class InternalTimer : Timer
{
private readonly Mobile m_From;
private readonly Mobile m_Mobile;
private readonly bool m_BloodDrinker;
public InternalTimer(Mobile from, Mobile m) : base(TimeSpan.FromSeconds(2.0), TimeSpan.FromSeconds(2.0), 5)
public InternalTimer(Mobile from, Mobile m, bool bloodDrinker) : base(TimeSpan.FromSeconds(2.0), TimeSpan.FromSeconds(2.0), 5)
{
m_From = from;
m_Mobile = m;
m_BloodDrinker = bloodDrinker;
}
protected override void OnTick()
{
DoBleed(m_Mobile, m_From, 5 - Index);
DoBleed(m_Mobile, m_From, 5 - Index, m_BloodDrinker);
if (Index == 4)
{

View file

@ -1115,7 +1115,8 @@ namespace Server
{
Bane = 0x00000001,
BattleLust = 0x00000002,
HitSparks = 0x00000004
HitSparks = 0x00000004,
BloodDrinker = 0x00000008
}
public sealed class ExtendedWeaponAttributes : BaseAttributes
@ -1165,6 +1166,13 @@ namespace Server
set => this[ExtendedWeaponAttribute.HitSparks] = value;
}
[CommandProperty(AccessLevel.GameMaster)]
public int BloodDrinker
{
get => this[ExtendedWeaponAttribute.BloodDrinker];
set => this[ExtendedWeaponAttribute.BloodDrinker] = value;
}
public void GetProperties(IPropertyList list)
{
if (Core.HS && Bane != 0)
@ -1177,6 +1185,11 @@ namespace Server
list.Add(1113710); // Battle Lust
}
if (Core.SA && BloodDrinker != 0)
{
list.Add(1113591); // Blood Drinker
}
if (Core.TOL && HitSparks != 0)
{
list.Add(1157326, HitSparks); // Sparks ~1_val~%