using System.Collections.Generic; using Server.ContextMenus; namespace Server.Items { public abstract class Food : Item { private Mobile m_Poisoner; private Poison m_Poison; private int m_FillFactor; [CommandProperty( AccessLevel.GameMaster )] public Mobile Poisoner { get => m_Poisoner; set => m_Poisoner = value; } [CommandProperty( AccessLevel.GameMaster )] public Poison Poison { get => m_Poison; set => m_Poison = value; } [CommandProperty( AccessLevel.GameMaster )] public int FillFactor { get => m_FillFactor; set => m_FillFactor = value; } public Food( int itemID ) : this( 1, itemID ) { } public Food( int amount, int itemID ) : base( itemID ) { Stackable = true; Amount = amount; m_FillFactor = 1; } public Food( Serial serial ) : base( serial ) { } public override void GetContextMenuEntries( Mobile from, List list ) { base.GetContextMenuEntries( from, list ); if ( from.Alive ) list.Add( new EatEntry( from, this ) ); } public override void OnDoubleClick( Mobile from ) { if ( !Movable ) return; if ( from.InRange( GetWorldLocation(), 1 ) ) { Eat( from ); } } public virtual bool Eat( Mobile from ) { // Fill the Mobile with FillFactor if ( CheckHunger( from ) ) { // Play a random "eat" sound from.PlaySound( Utility.Random( 0x3A, 3 ) ); if ( from.Body.IsHuman && !from.Mounted ) from.Animate( 34, 5, 1, true, false, 0 ); if ( m_Poison != null ) from.ApplyPoison( m_Poisoner, m_Poison ); Consume(); return true; } return false; } public virtual bool CheckHunger( Mobile from ) { return FillHunger( from, m_FillFactor ); } public static bool FillHunger( Mobile from, int fillFactor ) { if ( from.Hunger >= 20 ) { from.SendLocalizedMessage( 500867 ); // You are simply too full to eat any more! return false; } int iHunger = from.Hunger + fillFactor; if ( from.Stam < from.StamMax ) from.Stam += Utility.Random( 6, 3 ) + fillFactor / 5; if ( iHunger >= 20 ) { from.Hunger = 20; from.SendLocalizedMessage( 500872 ); // You manage to eat the food, but you are stuffed! } else { from.Hunger = iHunger; if ( iHunger < 5 ) from.SendLocalizedMessage( 500868 ); // You eat the food, but are still extremely hungry. else if ( iHunger < 10 ) from.SendLocalizedMessage( 500869 ); // You eat the food, and begin to feel more satiated. else if ( iHunger < 15 ) from.SendLocalizedMessage( 500870 ); // After eating the food, you feel much less hungry. else from.SendLocalizedMessage( 500871 ); // You feel quite full after consuming the food. } return true; } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 4 ); // version writer.Write( m_Poisoner ); Poison.Serialize( m_Poison, writer ); writer.Write( m_FillFactor ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { switch ( reader.ReadInt() ) { case 0: m_Poison = null; break; case 1: m_Poison = Poison.Lesser; break; case 2: m_Poison = Poison.Regular; break; case 3: m_Poison = Poison.Greater; break; case 4: m_Poison = Poison.Deadly; break; } break; } case 2: { m_Poison = Poison.Deserialize( reader ); break; } case 3: { m_Poison = Poison.Deserialize( reader ); m_FillFactor = reader.ReadInt(); break; } case 4: { m_Poisoner = reader.ReadMobile(); goto case 3; } } } } public class BreadLoaf : Food { [Constructible] public BreadLoaf() : this( 1 ) { } [Constructible] public BreadLoaf( int amount ) : base( amount, 0x103B ) { Weight = 1.0; FillFactor = 3; } public BreadLoaf( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Bacon : Food { [Constructible] public Bacon() : this( 1 ) { } [Constructible] public Bacon( int amount ) : base( amount, 0x979 ) { Weight = 1.0; FillFactor = 1; } public Bacon( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class SlabOfBacon : Food { [Constructible] public SlabOfBacon() : this( 1 ) { } [Constructible] public SlabOfBacon( int amount ) : base( amount, 0x976 ) { Weight = 1.0; FillFactor = 3; } public SlabOfBacon( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class FishSteak : Food { public override double DefaultWeight => 0.1; [Constructible] public FishSteak() : this( 1 ) { } [Constructible] public FishSteak( int amount ) : base( amount, 0x97B ) { FillFactor = 3; } public FishSteak( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class CheeseWheel : Food { public override double DefaultWeight => 0.1; [Constructible] public CheeseWheel() : this( 1 ) { } [Constructible] public CheeseWheel( int amount ) : base( amount, 0x97E ) { FillFactor = 3; } public CheeseWheel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class CheeseWedge : Food { public override double DefaultWeight => 0.1; [Constructible] public CheeseWedge() : this( 1 ) { } [Constructible] public CheeseWedge( int amount ) : base( amount, 0x97D ) { FillFactor = 3; } public CheeseWedge( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class CheeseSlice : Food { public override double DefaultWeight => 0.1; [Constructible] public CheeseSlice() : this( 1 ) { } [Constructible] public CheeseSlice( int amount ) : base( amount, 0x97C ) { FillFactor = 1; } public CheeseSlice( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class FrenchBread : Food { [Constructible] public FrenchBread() : this( 1 ) { } [Constructible] public FrenchBread( int amount ) : base( amount, 0x98C ) { Weight = 2.0; FillFactor = 3; } public FrenchBread( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class FriedEggs : Food { [Constructible] public FriedEggs() : this( 1 ) { } [Constructible] public FriedEggs( int amount ) : base( amount, 0x9B6 ) { Weight = 1.0; FillFactor = 4; } public FriedEggs( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class CookedBird : Food { [Constructible] public CookedBird() : this( 1 ) { } [Constructible] public CookedBird( int amount ) : base( amount, 0x9B7 ) { Weight = 1.0; FillFactor = 5; } public CookedBird( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class RoastPig : Food { [Constructible] public RoastPig() : this( 1 ) { } [Constructible] public RoastPig( int amount ) : base( amount, 0x9BB ) { Weight = 45.0; FillFactor = 20; } public RoastPig( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Sausage : Food { [Constructible] public Sausage() : this( 1 ) { } [Constructible] public Sausage( int amount ) : base( amount, 0x9C0 ) { Weight = 1.0; FillFactor = 4; } public Sausage( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Ham : Food { [Constructible] public Ham() : this( 1 ) { } [Constructible] public Ham( int amount ) : base( amount, 0x9C9 ) { Weight = 1.0; FillFactor = 5; } public Ham( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Cake : Food { [Constructible] public Cake() : base( 0x9E9 ) { Stackable = false; Weight = 1.0; FillFactor = 10; } public Cake( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Ribs : Food { [Constructible] public Ribs() : this( 1 ) { } [Constructible] public Ribs( int amount ) : base( amount, 0x9F2 ) { Weight = 1.0; FillFactor = 5; } public Ribs( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Cookies : Food { [Constructible] public Cookies() : base( 0x160b ) { Stackable = Core.ML; Weight = 1.0; FillFactor = 4; } public Cookies( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Muffins : Food { [Constructible] public Muffins() : base( 0x9eb ) { Stackable = false; Weight = 1.0; FillFactor = 4; } public Muffins( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } [TypeAlias( "Server.Items.Pizza" )] public class CheesePizza : Food { public override int LabelNumber => 1044516; // cheese pizza [Constructible] public CheesePizza() : base( 0x1040 ) { Stackable = false; Weight = 1.0; FillFactor = 6; } public CheesePizza( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class SausagePizza : Food { public override int LabelNumber => 1044517; // sausage pizza [Constructible] public SausagePizza() : base( 0x1040 ) { Stackable = false; Weight = 1.0; FillFactor = 6; } public SausagePizza( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } #if false public class Pizza : Food { [Constructible] public Pizza() : base( 0x1040 ) { Stackable = false; this.Weight = 1.0; this.FillFactor = 6; } public Pizza( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } #endif public class FruitPie : Food { public override int LabelNumber => 1041346; // baked fruit pie [Constructible] public FruitPie() : base( 0x1041 ) { Stackable = false; Weight = 1.0; FillFactor = 5; } public FruitPie( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class MeatPie : Food { public override int LabelNumber => 1041347; // baked meat pie [Constructible] public MeatPie() : base( 0x1041 ) { Stackable = false; Weight = 1.0; FillFactor = 5; } public MeatPie( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class PumpkinPie : Food { public override int LabelNumber => 1041348; // baked pumpkin pie [Constructible] public PumpkinPie() : base( 0x1041 ) { Stackable = false; Weight = 1.0; FillFactor = 5; } public PumpkinPie( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class ApplePie : Food { public override int LabelNumber => 1041343; // baked apple pie [Constructible] public ApplePie() : base( 0x1041 ) { Stackable = false; Weight = 1.0; FillFactor = 5; } public ApplePie( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class PeachCobbler : Food { public override int LabelNumber => 1041344; // baked peach cobbler [Constructible] public PeachCobbler() : base( 0x1041 ) { Stackable = false; Weight = 1.0; FillFactor = 5; } public PeachCobbler( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Quiche : Food { public override int LabelNumber => 1041345; // baked quiche [Constructible] public Quiche() : base( 0x1041 ) { Stackable = Core.ML; Weight = 1.0; FillFactor = 5; } public Quiche( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class LambLeg : Food { [Constructible] public LambLeg() : this( 1 ) { } [Constructible] public LambLeg( int amount ) : base( amount, 0x160a ) { Weight = 2.0; FillFactor = 5; } public LambLeg( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class ChickenLeg : Food { [Constructible] public ChickenLeg() : this( 1 ) { } [Constructible] public ChickenLeg( int amount ) : base( amount, 0x1608 ) { Weight = 1.0; FillFactor = 4; } public ChickenLeg( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } [FlippableAttribute( 0xC74, 0xC75 )] public class HoneydewMelon : Food { [Constructible] public HoneydewMelon() : this( 1 ) { } [Constructible] public HoneydewMelon( int amount ) : base( amount, 0xC74 ) { Weight = 1.0; FillFactor = 1; } public HoneydewMelon( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } [FlippableAttribute( 0xC64, 0xC65 )] public class YellowGourd : Food { [Constructible] public YellowGourd() : this( 1 ) { } [Constructible] public YellowGourd( int amount ) : base( amount, 0xC64 ) { Weight = 1.0; FillFactor = 1; } public YellowGourd( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } [FlippableAttribute( 0xC66, 0xC67 )] public class GreenGourd : Food { [Constructible] public GreenGourd() : this( 1 ) { } [Constructible] public GreenGourd( int amount ) : base( amount, 0xC66 ) { Weight = 1.0; FillFactor = 1; } public GreenGourd( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } [FlippableAttribute( 0xC7F, 0xC81 )] public class EarOfCorn : Food { [Constructible] public EarOfCorn() : this( 1 ) { } [Constructible] public EarOfCorn( int amount ) : base( amount, 0xC81 ) { Weight = 1.0; FillFactor = 1; } public EarOfCorn( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Turnip : Food { [Constructible] public Turnip() : this( 1 ) { } [Constructible] public Turnip( int amount ) : base( amount, 0xD3A ) { Weight = 1.0; FillFactor = 1; } public Turnip( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class SheafOfHay : Item { [Constructible] public SheafOfHay() : base( 0xF36 ) { Weight = 10.0; } public SheafOfHay( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } }