public void SetValue( int bitmask, int value )
{
if( (bitmask == (int)AosWeaponAttribute.DurabilityBonus) && (this is AosWeaponAttributes) )
{
if( m_Owner is BaseWeapon )
((BaseWeapon)m_Owner).UnscaleDurability();
}
else if( (bitmask == (int)AosArmorAttribute.DurabilityBonus) && (this is AosArmorAttributes) )
{
if( m_Owner is BaseArmor )
((BaseArmor)m_Owner).UnscaleDurability();
else if( m_Owner is BaseClothing )
((BaseClothing)m_Owner).UnscaleDurability();
}
uint mask = (uint)bitmask;
if( value != 0 )
{
if( (m_Names & mask) != 0 )
{
int index = GetIndex( mask );
if( index >= 0 && index < m_Values.Length )
m_Values[index] = value;
}
else
{
int index = GetIndex( mask );
if( index >= 0 && index <= m_Values.Length )
{
int[] old = m_Values;
m_Values = new int[old.Length + 1];
for( int i = 0; i < index; ++i )
m_Values[i] = old[i];
m_Values[index] = value;
for( int i = index; i < old.Length; ++i )
m_Values[i + 1] = old[i];
m_Names |= mask;
}
}
}
else if( (m_Names & mask) != 0 )
{
int index = GetIndex( mask );
if( index >= 0 && index < m_Values.Length )
{
m_Names &= ~mask;
if( m_Values.Length == 1 )
{
m_Values = m_Empty;
}
else
{
int[] old = m_Values;
m_Values = new int[old.Length - 1];
for( int i = 0; i < index; ++i )
m_Values[i] = old[i];
for( int i = index + 1; i < old.Length; ++i )
m_Values[i - 1] = old[i];
}
}
}
if( (bitmask == (int)AosWeaponAttribute.DurabilityBonus) && (this is AosWeaponAttributes) )
{
if( m_Owner is BaseWeapon )
((BaseWeapon)m_Owner).ScaleDurability();
}
else if( (bitmask == (int)AosArmorAttribute.DurabilityBonus) && (this is AosArmorAttributes) )
{
if( m_Owner is BaseArmor )
((BaseArmor)m_Owner).ScaleDurability();
else if( m_Owner is BaseClothing )
((BaseClothing)m_Owner).ScaleDurability();
}
if( m_Owner.Parent is Mobile )
{
Mobile m = (Mobile)m_Owner.Parent;
m.CheckStatTimers();
m.UpdateResistances();
m.Delta( MobileDelta.Stat | MobileDelta.WeaponDamage | MobileDelta.Hits | MobileDelta.Stam | MobileDelta.Mana );
if( this is AosSkillBonuses )
{
((AosSkillBonuses)this).Remove();
((AosSkillBonuses)this).AddTo( m );
}
}
m_Owner.InvalidateProperties();
}