ModernUO/Scripts/Engines/Treasures of Tokuno/BasePigmentsOfTokuno.cs
2010-02-23 21:35:52 +00:00

204 lines
5.8 KiB
C#

using Server;
using System;
using Server.Misc;
using Server.Mobiles;
namespace Server.Items
{
public abstract class BasePigmentsOfTokuno : Item, IUsesRemaining
{
public override int LabelNumber { get { return 1070933; } } // Pigments of Tokuno
private int m_UsesRemaining;
private TextDefinition m_Label;
protected TextDefinition Label
{
get { return m_Label; }
set { m_Label = value; InvalidateProperties(); }
}
#region Old Item Serialization Vars
/* DO NOT USE! Only used in serialization of pigments that originally derived from Item */
private bool m_InheritsItem;
protected bool InheritsItem
{
get{ return m_InheritsItem; }
}
#endregion
public BasePigmentsOfTokuno() : base( 0xEFF )
{
Weight = 1.0;
m_UsesRemaining = 1;
}
public BasePigmentsOfTokuno( int uses ) : base( 0xEFF )
{
Weight = 1.0;
m_UsesRemaining = uses;
}
public BasePigmentsOfTokuno( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if( m_Label != null && m_Label > 0 )
TextDefinition.AddTo( list, m_Label );
list.Add( 1060584, m_UsesRemaining.ToString() ); // uses remaining: ~1_val~
}
public override void OnDoubleClick( Mobile from )
{
if( IsAccessibleTo( from ) && from.InRange( GetWorldLocation(), 3 ) )
{
from.SendLocalizedMessage( 1070929 ); // Select the artifact or enhanced magic item to dye.
from.BeginTarget( 3, false, Server.Targeting.TargetFlags.None, new TargetStateCallback( InternalCallback ), this );
}
else
from.SendLocalizedMessage( 502436 ); // That is not accessible.
}
private void InternalCallback( Mobile from, object targeted, object state )
{
BasePigmentsOfTokuno pigment = (BasePigmentsOfTokuno)state;
if( pigment.Deleted || pigment.UsesRemaining <= 0 || !from.InRange( pigment.GetWorldLocation(), 3 ) || !pigment.IsAccessibleTo( from ))
return;
Item i = targeted as Item;
if( i == null )
from.SendLocalizedMessage( 1070931 ); // You can only dye artifacts and enhanced magic items with this tub.
else if( !from.InRange( i.GetWorldLocation(), 3 ) || !IsAccessibleTo( from ) )
from.SendLocalizedMessage( 502436 ); // That is not accessible.
else if( from.Items.Contains( i ) )
from.SendLocalizedMessage( 1070930 ); // Can't dye artifacts or enhanced magic items that are being worn.
else if( i.IsLockedDown )
from.SendLocalizedMessage( 1070932 ); // You may not dye artifacts and enhanced magic items which are locked down.
else if( i is MetalPigmentsOfTokuno )
from.SendLocalizedMessage( 1042417 ); // You cannot dye that.
else if( i is LesserPigmentsOfTokuno )
from.SendLocalizedMessage( 1042417 ); // You cannot dye that.
else if( i is PigmentsOfTokuno )
from.SendLocalizedMessage( 1042417 ); // You cannot dye that.
else if( !IsValidItem( i ) )
from.SendLocalizedMessage( 1070931 ); // You can only dye artifacts and enhanced magic items with this tub. //Yes, it says tub on OSI. Don't ask me why ;p
else
{
//Notes: on OSI there IS no hue check to see if it's already hued. and no messages on successful hue either
i.Hue = Hue;
if( --pigment.UsesRemaining <= 0 )
pigment.Delete();
from.PlaySound(0x23E); // As per OSI TC1
}
}
public static bool IsValidItem( Item i )
{
if( i is BasePigmentsOfTokuno )
return false;
Type t = i.GetType();
CraftResource resource = CraftResource.None;
if( i is BaseWeapon )
resource = ((BaseWeapon)i).Resource;
else if( i is BaseArmor )
resource = ((BaseArmor)i).Resource;
if( !CraftResources.IsStandard( resource ) )
return true;
return(
IsInTypeList( t, TreasuresOfTokuno.LesserArtifactsTotal )
|| IsInTypeList( t, TreasuresOfTokuno.GreaterArtifacts )
|| IsInTypeList( t, DemonKnight.ArtifactRarity10 )
|| IsInTypeList( t, DemonKnight.ArtifactRarity11 )
|| IsInTypeList( t, BaseCreature.MinorArtifactsMl )
|| IsInTypeList( t, StealableArtifactsSpawner.TypesOfEntires )
|| IsInTypeList( t, Paragon.Artifacts )
|| IsInTypeList( t, Leviathan.Artifacts )
|| IsInTypeList( t, TreasureMapChest.Artifacts )
);
}
private static bool IsInTypeList( Type t, Type[] list )
{
for( int i = 0; i < list.Length; i++ )
{
if( list[i] == t ) return true;
}
return false;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)1 );
writer.WriteEncodedInt( m_UsesRemaining );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_UsesRemaining = reader.ReadEncodedInt();
break;
}
case 0: // Old pigments that inherited from item
{
m_InheritsItem = true;
if ( this is LesserPigmentsOfTokuno )
((LesserPigmentsOfTokuno)this).Type = (LesserPigmentType)reader.ReadEncodedInt();
else if ( this is PigmentsOfTokuno )
((PigmentsOfTokuno)this).Type = (PigmentType)reader.ReadEncodedInt();
else if ( this is MetalPigmentsOfTokuno )
reader.ReadEncodedInt();
m_UsesRemaining = reader.ReadEncodedInt();
break;
}
}
}
#region IUsesRemaining Members
[CommandProperty( AccessLevel.GameMaster )]
public int UsesRemaining
{
get { return m_UsesRemaining; }
set { m_UsesRemaining = value; InvalidateProperties(); }
}
public bool ShowUsesRemaining
{
get { return true; }
set {}
}
#endregion
}
}