using System.Collections.Generic; using Server.ContextMenus; namespace Server.Items { public abstract class Food : Item { public Food(int itemID, int amount) : base(itemID) { Stackable = true; Amount = amount; FillFactor = 1; } public Food(Serial serial) : base(serial) { } [CommandProperty(AccessLevel.GameMaster)] public Mobile Poisoner{ get; set; } [CommandProperty(AccessLevel.GameMaster)] public Poison Poison{ get; set; } [CommandProperty(AccessLevel.GameMaster)] public int FillFactor{ get; set; } 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 (Poison != null) from.ApplyPoison(Poisoner, Poison); Consume(); return true; } return false; } public virtual bool CheckHunger(Mobile from) { return FillHunger(from, 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(4); // version writer.Write(Poisoner); Poison.Serialize(Poison, writer); writer.Write(FillFactor); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 1: { switch (reader.ReadInt()) { case 0: Poison = null; break; case 1: Poison = Poison.Lesser; break; case 2: Poison = Poison.Regular; break; case 3: Poison = Poison.Greater; break; case 4: Poison = Poison.Deadly; break; } break; } case 2: { Poison = Poison.Deserialize(reader); break; } case 3: { Poison = Poison.Deserialize(reader); FillFactor = reader.ReadInt(); break; } case 4: { Poisoner = reader.ReadMobile(); goto case 3; } } } } public class BreadLoaf : Food { [Constructible] public BreadLoaf(int amount = 1) : base(0x103B, amount) { Weight = 1.0; FillFactor = 3; } public BreadLoaf(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Bacon : Food { [Constructible] public Bacon(int amount = 1) : base(0x979, amount) { Weight = 1.0; FillFactor = 1; } public Bacon(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class SlabOfBacon : Food { [Constructible] public SlabOfBacon(int amount = 1) : base(0x976, amount) { Weight = 1.0; FillFactor = 3; } public SlabOfBacon(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class FishSteak : Food { [Constructible] public FishSteak(int amount = 1) : base(0x97B, amount) { FillFactor = 3; } public FishSteak(Serial serial) : base(serial) { } public override double DefaultWeight => 0.1; public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class CheeseWheel : Food { [Constructible] public CheeseWheel(int amount = 1) : base(0x97E, amount) { FillFactor = 3; } public CheeseWheel(Serial serial) : base(serial) { } public override double DefaultWeight => 0.1; public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class CheeseWedge : Food { [Constructible] public CheeseWedge(int amount = 1) : base(0x97D, amount) { FillFactor = 3; } public CheeseWedge(Serial serial) : base(serial) { } public override double DefaultWeight => 0.1; public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class CheeseSlice : Food { [Constructible] public CheeseSlice(int amount = 1) : base(0x97C, amount) { FillFactor = 1; } public CheeseSlice(Serial serial) : base(serial) { } public override double DefaultWeight => 0.1; public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class FrenchBread : Food { [Constructible] public FrenchBread(int amount = 1) : base(0x98C, amount) { Weight = 2.0; FillFactor = 3; } public FrenchBread(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class FriedEggs : Food { [Constructible] public FriedEggs(int amount = 1) : base(0x9B6, amount) { Weight = 1.0; FillFactor = 4; } public FriedEggs(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class CookedBird : Food { [Constructible] public CookedBird(int amount = 1) : base(0x9B7, amount) { Weight = 1.0; FillFactor = 5; } public CookedBird(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class RoastPig : Food { [Constructible] public RoastPig(int amount = 1) : base(0x9BB, amount) { Weight = 45.0; FillFactor = 20; } public RoastPig(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Sausage : Food { [Constructible] public Sausage(int amount = 1) : base(0x9C0, amount) { Weight = 1.0; FillFactor = 4; } public Sausage(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Ham : Food { [Constructible] public Ham(int amount = 1) : base(0x9C9, amount) { Weight = 1.0; FillFactor = 5; } public Ham(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Cake : Food { [Constructible] public Cake() : base(0x9E9, 1) { Stackable = false; Weight = 1.0; FillFactor = 10; } public Cake(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Ribs : Food { [Constructible] public Ribs(int amount = 1) : base(0x9F2, amount) { Weight = 1.0; FillFactor = 5; } public Ribs(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Cookies : Food { [Constructible] public Cookies() : base(0x160b, 1) { 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(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Muffins : Food { [Constructible] public Muffins() : base(0x9eb, 1) { Stackable = false; Weight = 1.0; FillFactor = 4; } public Muffins(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } [TypeAlias("Server.Items.Pizza")] public class CheesePizza : Food { [Constructible] public CheesePizza() : base(0x1040, 1) { Stackable = false; Weight = 1.0; FillFactor = 6; } public CheesePizza(Serial serial) : base(serial) { } public override int LabelNumber => 1044516; // cheese pizza public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class SausagePizza : Food { [Constructible] public SausagePizza() : base(0x1040, 1) { Stackable = false; Weight = 1.0; FillFactor = 6; } public SausagePizza(Serial serial) : base(serial) { } public override int LabelNumber => 1044517; // sausage pizza public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(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 { [Constructible] public FruitPie() : base(0x1041, 1) { Stackable = false; Weight = 1.0; FillFactor = 5; } public FruitPie(Serial serial) : base(serial) { } public override int LabelNumber => 1041346; // baked fruit pie public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class MeatPie : Food { [Constructible] public MeatPie() : base(0x1041, 1) { Stackable = false; Weight = 1.0; FillFactor = 5; } public MeatPie(Serial serial) : base(serial) { } public override int LabelNumber => 1041347; // baked meat pie public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class PumpkinPie : Food { [Constructible] public PumpkinPie() : base(0x1041, 1) { Stackable = false; Weight = 1.0; FillFactor = 5; } public PumpkinPie(Serial serial) : base(serial) { } public override int LabelNumber => 1041348; // baked pumpkin pie public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class ApplePie : Food { [Constructible] public ApplePie() : base(0x1041, 1) { Stackable = false; Weight = 1.0; FillFactor = 5; } public ApplePie(Serial serial) : base(serial) { } public override int LabelNumber => 1041343; // baked apple pie public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class PeachCobbler : Food { [Constructible] public PeachCobbler() : base(0x1041, 1) { Stackable = false; Weight = 1.0; FillFactor = 5; } public PeachCobbler(Serial serial) : base(serial) { } public override int LabelNumber => 1041344; // baked peach cobbler public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Quiche : Food { [Constructible] public Quiche() : base(0x1041, 1) { Stackable = Core.ML; Weight = 1.0; FillFactor = 5; } public Quiche(Serial serial) : base(serial) { } public override int LabelNumber => 1041345; // baked quiche public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class LambLeg : Food { [Constructible] public LambLeg(int amount = 1) : base(0x160a, amount) { Weight = 2.0; FillFactor = 5; } public LambLeg(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class ChickenLeg : Food { [Constructible] public ChickenLeg(int amount = 1) : base(0x1608, amount) { Weight = 1.0; FillFactor = 4; } public ChickenLeg(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } [Flippable(0xC74, 0xC75)] public class HoneydewMelon : Food { [Constructible] public HoneydewMelon(int amount = 1) : base(0xC74, amount) { Weight = 1.0; FillFactor = 1; } public HoneydewMelon(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } [Flippable(0xC64, 0xC65)] public class YellowGourd : Food { [Constructible] public YellowGourd(int amount = 1) : base(0xC64, amount) { Weight = 1.0; FillFactor = 1; } public YellowGourd(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } [Flippable(0xC66, 0xC67)] public class GreenGourd : Food { [Constructible] public GreenGourd(int amount = 1) : base(0xC66, amount) { Weight = 1.0; FillFactor = 1; } public GreenGourd(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } [Flippable(0xC7F, 0xC81)] public class EarOfCorn : Food { [Constructible] public EarOfCorn(int amount = 1) : base(0xC81, amount) { Weight = 1.0; FillFactor = 1; } public EarOfCorn(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } public class Turnip : Food { [Constructible] public Turnip(int amount = 1) : base(0xD3A, amount) { Weight = 1.0; FillFactor = 1; } public Turnip(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(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(0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } }