ModernUO/Scripts/Items/Food/Food.cs

1268 lines
No EOL
24 KiB
C#

using System.Collections.Generic;
using Server.ContextMenus;
namespace Server.Items
{
public abstract class Food : Item
{
public Food(int itemID) : this(1, itemID)
{
}
public Food(int amount, int itemID) : 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<ContextMenuEntry> 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() : 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(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(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(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class FishSteak : Food
{
[Constructible]
public FishSteak() : this(1)
{
}
[Constructible]
public FishSteak(int amount) : base(amount, 0x97B)
{
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() : this(1)
{
}
[Constructible]
public CheeseWheel(int amount) : base(amount, 0x97E)
{
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() : this(1)
{
}
[Constructible]
public CheeseWedge(int amount) : base(amount, 0x97D)
{
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() : this(1)
{
}
[Constructible]
public CheeseSlice(int amount) : base(amount, 0x97C)
{
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() : 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(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(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(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(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(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(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(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(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(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(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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
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() : 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(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(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() : 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(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() : 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(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() : 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(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() : 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(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(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();
}
}
}