using System;
namespace Server.Items
{
public class BaseQuiver : BaseContainer, IDyable
{
public override int DefaultGumpID{ get{ return 65; } }
public override int DefaultDropSound{ get{ return 0x48; } }
public override int MaxWeight{ get{ return 0; } }
private Mobile m_Owner;
private AosAttributes m_AosAttributes;
private AosSkillBonuses m_AosSkillBonuses;
private Mobile m_Crafter;
private int m_LowerAmmoCost; //Lower Ammo Cost Mod
[CommandProperty( AccessLevel.GameMaster )]
public AosAttributes Attributes
{
get{ return m_AosAttributes; }
set{}
}
[CommandProperty( AccessLevel.GameMaster )]
public AosSkillBonuses SkillBonuses
{
get{ return m_AosSkillBonuses; }
set{}
}
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Crafter
{
get{ return m_Crafter; }
set{ m_Crafter = value; InvalidateProperties(); }
}
//Lower Ammo Cost Mod
[CommandProperty( AccessLevel.GameMaster )]
public int LowerAmmoCost
{
get{ return m_LowerAmmoCost; }
set{ m_LowerAmmoCost = value; InvalidateProperties(); }
}
//End Lower Ammo Cost Mod
public BaseQuiver( int itemID ) : base( itemID )
{
Name = "Quiver";
Weight = 0.0;
Layer = Layer.MiddleTorso;
m_AosAttributes = new AosAttributes( this );
m_AosSkillBonuses = new AosSkillBonuses( this );
}
public override bool OnDragDropInto( Mobile from, Item item, Point3D p )
{
if( from != null && item is Arrow || item is PoisonArrow
|| item is Bolt || item is Bullet || item is FukiyaDart )
{
this.TotalWeight = this.TotalWeight * 70 / 100;
return base.OnDragDropInto( from, item, p );
}
else
{
from.SendMessage("That is not an arrow, bullet,posion arrow or bolt!");
return false;
}
}
public override bool TryDropItem( Mobile from, Item dropped, bool sendFullMessage )
{
if( from != null && dropped is Arrow || dropped is PoisonArrow
|| dropped is Bolt || dropped is Bullet || dropped is FukiyaDart )
{
this.TotalWeight = this.TotalWeight * 70 / 100;
return base.TryDropItem( from, dropped, sendFullMessage );
}
else
{
from.SendMessage("That is not an arrow, bullet, poison arrow or bolt!");
return false;
}
}
public override void OnItemRemoved( Item item )
{
base.OnItemRemoved( item );
if ( TotalItems == 0 )
TotalWeight = 0;
}
public bool Dye( Mobile from, DyeTub sender )
{
if ( Deleted )
return false;
Hue = sender.DyedHue;
return true;
}
public override bool OnEquip( Mobile from )
{
if ( Core.AOS )
m_AosSkillBonuses.AddTo( from );
return base.OnEquip( from );
}
public override void OnRemoved( object parent )
{
if ( Core.AOS )
m_AosSkillBonuses.Remove();
return;
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
m_AosSkillBonuses.GetProperties( list );
int prop;
if ( m_Crafter != null )
list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
if ( (prop = m_AosAttributes.DefendChance) != 0 )
list.Add( 1060408, prop.ToString() ); //Defend Chance ~1_val~%
if ( (prop = m_AosAttributes.WeaponDamage) != 0 )
list.Add( 1060401, prop.ToString() ); //Weapon Damage ~1_val~
if ( (prop = ( m_AosAttributes.Luck)) != 0 )
list.Add( 1060436, prop.ToString() ); // luck ~1_val~
if ( (prop = m_AosAttributes.BonusDex) != 0 )
list.Add( 1060409, prop.ToString() ); // dexterity bonus ~1_val~
if ( (prop = m_AosAttributes.BonusStr) != 0 )
list.Add( 1060485, prop.ToString() ); // strength bonus ~1_val~
if ( (prop = m_AosAttributes.WeaponSpeed) != 0 )
list.Add( 1060486, prop.ToString() ); // swing speed increase ~1_val~%
if(TotalWeight != 0)
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( InvalidateProperties ) );
TotalWeight = 0;
}
public override void OnSingleClick( Mobile from )
{
this.LabelTo( from, Name );
}
public BaseQuiver( Serial serial ) : base( serial )
{
}
public override void UpdateTotals()
{
base.UpdateTotals();
SetTotalWeight( 0 );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (int) m_LowerAmmoCost ); //Lower Ammo Cost Mod
writer.Write( m_Crafter );
m_AosAttributes.Serialize( writer );
m_AosSkillBonuses.Serialize( writer );
writer.Write( (Mobile) m_Owner );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
//Lower Ammo Cost Mod
case 1:
{
m_LowerAmmoCost = reader.ReadInt();
goto case 0;
}
case 0:
{
m_Crafter = reader.ReadMobile();
m_AosAttributes = new AosAttributes( this, reader );
m_AosSkillBonuses = new AosSkillBonuses( this, reader );
m_Owner = (Mobile) reader.ReadMobile();
break;
}
}
}
}
}