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
This commit is contained in:
Mark Sturgill 2014-02-09 14:38:43 -07:00
parent cfdd943142
commit e68cfe354f

View file

@ -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 );