Aetherius Shadowblade
Member
- ServUO Version
- Publish 58
- Ultima Expansion
- Endless Journey
Getting this error on a winekeg for the winecrafting package, was this changed to something else? Instead of ICraftable, maybe something different.
_Winecrafting/Items/Food/WineKeg.cs(13,31): error CS0535: 'WineKeg' does not implement interface member 'ICraftable.OnCraft(int, bool, Mobile, CraftSystem, Type, ITool, CraftItem, int)' [/home/jburns/ServUO/Scripts/Scripts.csproj]
C#:
//================================================//
// Created by dracana //
// Desc: Crafted Wine Keg item and definitions. //
//================================================//
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Engines.Craft;
namespace Server.Items
{
public class WineKeg : Item, ICraftable
{
public static readonly TimeSpan CheckDelay = TimeSpan.FromDays( 7.0 );
private int m_Held;
private Mobile m_Crafter;
private WineQuality m_Quality;
private GrapeVariety m_Variety;
private DateTime m_Start;
private double m_BottleDuration;
private bool m_AllowBottling;
[CommandProperty( AccessLevel.GameMaster )]
public int Held
{
get
{
return m_Held;
}
set
{
if ( m_Held != value )
{
this.Weight += (value - m_Held) * 0.8;
m_Held = value;
InvalidateProperties();
}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public GrapeVariety Variety
{
get
{
return m_Variety;
}
set
{
if ( m_Variety != value )
{
m_Variety = value;
InvalidateProperties();
}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Crafter
{
get{ return m_Crafter; }
set{ m_Crafter = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public WineQuality Quality
{
get{ return m_Quality; }
set{ m_Quality = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool AllowBottling
{
get
{
if ( !m_AllowBottling )
m_AllowBottling = ( 0 >= TimeSpan.Compare( TimeSpan.FromDays( m_BottleDuration ),
DateTime.Now.Subtract( m_Start )));
return m_AllowBottling;
}
set { m_AllowBottling = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public double BottleDuration
{
get { return m_BottleDuration; }
set { m_BottleDuration = value; }
}
public WineKeg( Serial serial ) : base( serial )
{
}
private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
{
if ( setIf )
flags |= toSet;
}
private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
{
return ( (flags & toGet) != 0 );
}
[Flags]
private enum SaveFlag
{
None = 0x00000000,
Held = 0x00000001,
Crafter = 0x00000002,
Quality = 0x00000004,
Variety = 0x00000008
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 2 ); // version
//version 2
writer.Write( (DateTime)m_Start );
writer.Write( (double)m_BottleDuration );
writer.Write( (bool)m_AllowBottling );
//version 1
SaveFlag flags = SaveFlag.None;
SetSaveFlag( ref flags, SaveFlag.Held, m_Held != 0 );
SetSaveFlag( ref flags, SaveFlag.Crafter, m_Crafter != null );
SetSaveFlag( ref flags, SaveFlag.Quality, m_Quality != WineQuality.Regular );
SetSaveFlag( ref flags, SaveFlag.Variety, m_Variety != DefaultVariety );
writer.WriteEncodedInt( (int) flags );
if ( GetSaveFlag( flags, SaveFlag.Held ) )
writer.Write( (int) m_Held );
if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
writer.Write( (Mobile) m_Crafter );
if ( GetSaveFlag( flags, SaveFlag.Quality ) )
writer.WriteEncodedInt( (int) m_Quality );
if ( GetSaveFlag( flags, SaveFlag.Variety ) )
writer.WriteEncodedInt( (int) m_Variety );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 2:
{
m_Start = reader.ReadDateTime();
m_BottleDuration = reader.ReadDouble();
m_AllowBottling = reader.ReadBool();
goto case 1;
}
case 1:
{
SaveFlag flags = (SaveFlag)reader.ReadEncodedInt();
if ( GetSaveFlag( flags, SaveFlag.Held ) )
m_Held = reader.ReadInt();
if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
m_Crafter = reader.ReadMobile();
if ( GetSaveFlag( flags, SaveFlag.Quality ) )
m_Quality = (WineQuality)reader.ReadEncodedInt();
else
m_Quality = WineQuality.Regular;
if ( m_Quality == WineQuality.Low )
m_Quality = WineQuality.Regular;
if ( GetSaveFlag( flags, SaveFlag.Variety ) )
m_Variety = (GrapeVariety)reader.ReadEncodedInt();
else
m_Variety = DefaultVariety;
if ( m_Variety == GrapeVariety.None )
m_Variety = DefaultVariety;
break;
}
}
}
public virtual GrapeVariety DefaultVariety{ get{ return GrapeVariety.CabernetSauvignon; } }
[Constructable]
public WineKeg( ) : base( 0x1940 )
{
this.Weight = 1.0;
m_Held = 75;
m_Quality = WineQuality.Regular;
m_Crafter = null;
m_Variety = DefaultVariety;
m_BottleDuration = 7.0;
m_AllowBottling = false;
m_Start = DateTime.Now;
}
public override void AddNameProperty( ObjectPropertyList list )
{
if (this.Name == null )
{
if ( m_Crafter != null )
list.Add( m_Crafter.Name+" Vineyards" );
else
list.Add( "Cheap Table Wine" );
}
else
{
list.Add (this.Name);
}
}
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( list );
string wineType;
wineType = WinemakingResources.GetName( m_Variety );
if ( m_Quality == WineQuality.Exceptional )
{
list.Add( 1060847, "Special Reserve\t{0}", wineType );
}
else
{
list.Add( 1060847, "\t{0}", wineType );
}
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
int number;
if ( m_Held <= 0 )
number = 502246; // The keg is empty.
else if ( m_Held < 5 )
number = 502248; // The keg is nearly empty.
else if ( m_Held < 10 )
number = 502249; // The keg is not very full.
else if ( m_Held < 18 )
number = 502250; // The keg is about one quarter full.
else if ( m_Held < 25 )
number = 502251; // The keg is about one third full.
else if ( m_Held < 32 )
number = 502252; // The keg is almost half full.
else if ( m_Held < 38 )
number = 502254; // The keg is approximately half full.
else if ( m_Held < 45 )
number = 502253; // The keg is more than half full.
else if ( m_Held < 56 )
number = 502255; // The keg is about three quarters full.
else if ( m_Held < 64 )
number = 502256; // The keg is very full.
else if ( m_Held < 75 )
number = 502257; // The liquid is almost to the top of the keg.
else
number = 502258; // The keg is completely full.
list.Add( number );
}
public override void OnSingleClick( Mobile from )
{
base.OnSingleClick( from );
int number;
string wineType;
if (this.Name == null )
{
if ( m_Crafter != null )
this.LabelTo( from, "{0} Vinyards", m_Crafter.Name );
else
this.LabelTo( from, "Cheap Table Wine" );
}
else
{
this.LabelTo( from, "{0}", this.Name );
}
wineType = WinemakingResources.GetName( m_Variety );
if ( m_Quality == WineQuality.Exceptional )
{
this.LabelTo( from, "Special Reserve {0}", wineType );
}
else
{
this.LabelTo( from, "{0}", wineType );
}
if ( m_Held <= 0 )
number = 502246; // The keg is empty.
else if ( m_Held < 5 )
number = 502248; // The keg is nearly empty.
else if ( m_Held < 10 )
number = 502249; // The keg is not very full.
else if ( m_Held < 18 )
number = 502250; // The keg is about one quarter full.
else if ( m_Held < 25 )
number = 502251; // The keg is about one third full.
else if ( m_Held < 32 )
number = 502252; // The keg is almost half full.
else if ( m_Held < 38 )
number = 502254; // The keg is approximately half full.
else if ( m_Held < 45 )
number = 502253; // The keg is more than half full.
else if ( m_Held < 56 )
number = 502255; // The keg is about three quarters full.
else if ( m_Held < 64 )
number = 502256; // The keg is very full.
else if ( m_Held < 75 )
number = 502257; // The liquid is almost to the top of the keg.
else
number = 502258; // The keg is completely full.
this.LabelTo( from, number );
}
public override void OnDoubleClick( Mobile from )
{
if ( AllowBottling )
{
if ( from.InRange( GetWorldLocation(), 2 ) )
{
if ( m_Held > 0 )
{
Container pack = from.Backpack;
if ( pack != null && pack.ConsumeTotal( typeof( EmptyWineBottle ), 1 ) )
{
from.SendLocalizedMessage( 502242 ); // You pour some of the keg's contents into an empty bottle...
BaseCraftWine wine = FillBottle();
wine.Crafter = m_Crafter;
wine.Quality = m_Quality;
wine.Variety = m_Variety;
if (this.Name != null)
wine.Name = this.Name;
if ( pack.TryDropItem( from, wine, false ) )
{
from.SendLocalizedMessage( 502243 ); // ...and place it into your backpack.
from.PlaySound( 0x240 );
if ( --Held == 0 )
{
this.Delete();
if ( GiveKeg( from ) )
{
from.SendMessage( "The Keg is empty and you clean it for reuse" );
}
else
{
from.SendMessage( "The Keg is now empty and cannot be reused." );
}
}
}
else
{
from.SendLocalizedMessage( 502244 ); // ...but there is no room for the bottle in your backpack.
wine.Delete();
}
}
}
else
{
from.SendLocalizedMessage( 502246 ); // The keg is empty.
}
}
else
{
from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
}
else
{
from.SendMessage( "This keg is not ready to bottle yet, the fermentation process is not yet complete." );
}
}
public bool GiveKeg( Mobile m )
{
Container pack = m.Backpack;
Keg keg = new Keg();
if ( pack == null || !pack.TryDropItem( m, keg, false ) )
{
keg.Delete();
return false;
}
return true;
}
public BaseCraftWine FillBottle()
{
switch ( m_Variety )
{
default: return new BottleOfWine();
}
}
public static void Initialize()
{
TileData.ItemTable[0x1940].Height = 4;
}
#region ICraftable Members
public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
{
Held = 75;
Quality = (WineQuality)quality;
if ( makersMark )
Crafter = from;
Item[] items = from.Backpack.FindItemsByType( typeof( VinyardLabelMaker ) );
if ( items.Length != 0 )
{
foreach( VinyardLabelMaker lm in items )
{
if (lm.VinyardName != null)
{
this.Name = lm.VinyardName;
break;
}
}
}
Type resourceType = typeRes;
if ( resourceType == null )
resourceType = craftItem.Resources.GetAt( 0 ).ItemType;
Variety = WinemakingResources.GetFromType( resourceType );
CraftContext context = craftSystem.GetContext( from );
Hue = 0;
BottleDuration = 7.0;
AllowBottling = false;
m_Start = DateTime.Now;
return quality;
}
#endregion
}
}