From e68cfe354f390ec1d5ce2c3c66165cbaf8f0daa8 Mon Sep 17 00:00:00 2001 From: Mark Sturgill Date: Sun, 9 Feb 2014 14:38:43 -0700 Subject: [PATCH] add new visible damage mode Selective to VisibleDamageType enumeration two new virtual properties ShowVisibleDamage and CanSeeVisibleDamage can be used to control damage visibility default values for this mode are controlled by the static properties Mobile.DefaultShowVisibleDamage and Mobile.DefaultCanSeeVisibleDamage --- Server/Mobile.cs | 68 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 2b9ae3425..7b5e14d9d 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -452,7 +452,8 @@ namespace Server { None, Related, - Everyone + Everyone, + Selective } public enum ResistanceType @@ -5197,6 +5198,11 @@ namespace Server SendVisibleDamageEveryone(amount); break; } + case VisibleDamageType.Selective: + { + SendVisibleDamageSelective(from, amount); + break; + } } OnDamage( amount, from, newHits < 0 ); @@ -5314,6 +5320,66 @@ namespace Server eable.Free(); } + public static bool m_DefaultShowVisibleDamage, m_DefaultCanSeeVisibleDamage; + + public static bool DefaultShowVisibleDamage { get { return m_DefaultShowVisibleDamage; } set { m_DefaultShowVisibleDamage = value; } } + public static bool DefaultCanSeeVisibleDamage { get { return m_DefaultCanSeeVisibleDamage; } set { m_DefaultCanSeeVisibleDamage = value; } } + + public virtual bool ShowVisibleDamage { get { return m_DefaultShowVisibleDamage; } } + public virtual bool CanSeeVisibleDamage { get { return m_DefaultCanSeeVisibleDamage; } } + + public void SendVisibleDamageSelective(Mobile from, int amount) + { + NetState ourState = m_NetState, theirState = (from == null ? null : from.m_NetState); + + Mobile damager = from; + Mobile damaged = this; + + if (ourState == null) + { + Mobile master = GetDamageMaster(from); + + if (master != null) + { + damaged = master; + ourState = master.m_NetState; + } + } + + if (!damaged.ShowVisibleDamage) + return; + + if (theirState == null && from != null) + { + Mobile master = from.GetDamageMaster(this); + + if (master != null) + { + damager = master; + theirState = master.m_NetState; + } + } + + if (amount > 0 && (ourState != null || theirState != null)) + { + if (damaged.CanSeeVisibleDamage && ourState != null) + { + if (ourState.DamagePacket) + ourState.Send(new DamagePacket(this, amount)); + else + ourState.Send(new DamagePacketOld(this, amount)); + } + + if (theirState != null && theirState != ourState && damager.CanSeeVisibleDamage) + { + if (theirState.DamagePacket) + theirState.Send(new DamagePacket(this, amount)); + else + theirState.Send(new DamagePacketOld(this, amount)); + } + } + } + public void Heal( int amount ) { Heal( amount, this, true );