fix: Codegens Food & Beverages (#1021)
- [X] Simplifies beverages - [X] Codegens food & beverages
This commit is contained in:
parent
7b619f23b8
commit
dd95a8a1e3
23 changed files with 965 additions and 1488 deletions
|
|
@ -1,31 +1,17 @@
|
|||
namespace Server.Items
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Items;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Wasabi : Food
|
||||
{
|
||||
public class Wasabi : Item
|
||||
{
|
||||
[Constructible]
|
||||
public Wasabi() : base(0x24E8) => Weight = 1.0;
|
||||
}
|
||||
|
||||
public Wasabi(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class WasabiClumps : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class WasabiClumps : Food
|
||||
{
|
||||
[Constructible]
|
||||
public WasabiClumps() : base(0x24EB)
|
||||
{
|
||||
|
|
@ -33,52 +19,19 @@ namespace Server.Items
|
|||
Weight = 1.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public WasabiClumps(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class EmptyBentoBox : Item
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class EmptyBentoBox : Item
|
||||
{
|
||||
[Constructible]
|
||||
public EmptyBentoBox() : base(0x2834) => Weight = 5.0;
|
||||
|
||||
public EmptyBentoBox(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BentoBox : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class BentoBox : Food
|
||||
{
|
||||
[Constructible]
|
||||
public BentoBox() : base(0x2836)
|
||||
{
|
||||
|
|
@ -87,10 +40,6 @@ namespace Server.Items
|
|||
FillFactor = 2;
|
||||
}
|
||||
|
||||
public BentoBox(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool Eat(Mobile from)
|
||||
{
|
||||
if (!base.Eat(from))
|
||||
|
|
@ -101,24 +50,11 @@ namespace Server.Items
|
|||
from.AddToBackpack(new EmptyBentoBox());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SushiRolls : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class SushiRolls : Food
|
||||
{
|
||||
[Constructible]
|
||||
public SushiRolls() : base(0x283E)
|
||||
{
|
||||
|
|
@ -126,28 +62,11 @@ namespace Server.Items
|
|||
Weight = 3.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public SushiRolls(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SushiPlatter : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class SushiPlatter : Food
|
||||
{
|
||||
[Constructible]
|
||||
public SushiPlatter() : base(0x2840)
|
||||
{
|
||||
|
|
@ -155,52 +74,18 @@ namespace Server.Items
|
|||
Weight = 3.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public SushiPlatter(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class GreenTeaBasket : Item
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class GreenTeaBasket : Item
|
||||
{
|
||||
[Constructible]
|
||||
public GreenTeaBasket() : base(0x284B) => Weight = 10.0;
|
||||
}
|
||||
|
||||
public GreenTeaBasket(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class GreenTea : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class GreenTea : Food
|
||||
{
|
||||
[Constructible]
|
||||
public GreenTea() : base(0x284C)
|
||||
{
|
||||
|
|
@ -208,28 +93,11 @@ namespace Server.Items
|
|||
Weight = 4.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public GreenTea(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class MisoSoup : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class MisoSoup : Food
|
||||
{
|
||||
[Constructible]
|
||||
public MisoSoup() : base(0x284D)
|
||||
{
|
||||
|
|
@ -237,28 +105,11 @@ namespace Server.Items
|
|||
Weight = 4.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public MisoSoup(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class WhiteMisoSoup : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class WhiteMisoSoup : Food
|
||||
{
|
||||
[Constructible]
|
||||
public WhiteMisoSoup() : base(0x284E)
|
||||
{
|
||||
|
|
@ -266,28 +117,11 @@ namespace Server.Items
|
|||
Weight = 4.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public WhiteMisoSoup(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class RedMisoSoup : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class RedMisoSoup : Food
|
||||
{
|
||||
[Constructible]
|
||||
public RedMisoSoup() : base(0x284F)
|
||||
{
|
||||
|
|
@ -295,28 +129,11 @@ namespace Server.Items
|
|||
Weight = 4.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
public RedMisoSoup(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class AwaseMisoSoup : Food
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class AwaseMisoSoup : Food
|
||||
{
|
||||
[Constructible]
|
||||
public AwaseMisoSoup() : base(0x2850)
|
||||
{
|
||||
|
|
@ -324,23 +141,4 @@ namespace Server.Items
|
|||
Weight = 4.0;
|
||||
FillFactor = 2;
|
||||
}
|
||||
|
||||
public AwaseMisoSoup(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.Plants;
|
||||
using Server.Engines.Quests;
|
||||
using Server.Engines.Quests.Hag;
|
||||
|
|
@ -9,41 +10,34 @@ using Server.Multis;
|
|||
using Server.Network;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.Items
|
||||
namespace Server.Items;
|
||||
|
||||
public enum BeverageType
|
||||
{
|
||||
public enum BeverageType
|
||||
{
|
||||
Ale,
|
||||
Cider,
|
||||
Liquor,
|
||||
Milk,
|
||||
Wine,
|
||||
Water
|
||||
}
|
||||
}
|
||||
|
||||
public interface IHasQuantity
|
||||
{
|
||||
public interface IHasQuantity
|
||||
{
|
||||
int Quantity { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
public interface IWaterSource : IHasQuantity
|
||||
{
|
||||
}
|
||||
public interface IWaterSource : IHasQuantity
|
||||
{
|
||||
}
|
||||
|
||||
// TODO: Flippable attributes
|
||||
|
||||
[TypeAlias("Server.Items.BottleAle", "Server.Items.BottleLiquor", "Server.Items.BottleWine")]
|
||||
public class BeverageBottle : BaseBeverage
|
||||
{
|
||||
// TODO: Flippable attributes
|
||||
[SerializationGenerator(0, false)]
|
||||
[TypeAlias("Server.Items.BottleAle", "Server.Items.BottleLiquor", "Server.Items.BottleWine")]
|
||||
public partial class BeverageBottle : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public BeverageBottle(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public BeverageBottle(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public BeverageBottle(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int BaseLabelNumber => 1042959; // a bottle of Ale
|
||||
public override int MaxQuantity => 5;
|
||||
|
|
@ -51,262 +45,98 @@ namespace Server.Items
|
|||
|
||||
public override int ComputeItemID()
|
||||
{
|
||||
if (!IsEmpty)
|
||||
if (IsEmpty)
|
||||
{
|
||||
switch (Content)
|
||||
{
|
||||
case BeverageType.Ale: return 0x99F;
|
||||
case BeverageType.Cider: return 0x99F;
|
||||
case BeverageType.Liquor: return 0x99B;
|
||||
case BeverageType.Milk: return 0x99B;
|
||||
case BeverageType.Wine: return 0x9C7;
|
||||
case BeverageType.Water: return 0x99B;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
return Content switch
|
||||
{
|
||||
base.Serialize(writer);
|
||||
BeverageType.Ale => 0x99F,
|
||||
BeverageType.Cider => 0x99F,
|
||||
BeverageType.Liquor => 0x99B,
|
||||
BeverageType.Milk => 0x99B,
|
||||
BeverageType.Wine => 0x9C7,
|
||||
BeverageType.Water => 0x99B,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (CheckType("BottleAle"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Ale;
|
||||
}
|
||||
else if (CheckType("BottleLiquor"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Liquor;
|
||||
}
|
||||
else if (CheckType("BottleWine"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Wine;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid beverage type");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Jug : BaseBeverage
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Jug : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public Jug(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public Jug(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public Jug(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int BaseLabelNumber => 1042965; // a jug of Ale
|
||||
public override int MaxQuantity => 10;
|
||||
public override bool Fillable => false;
|
||||
|
||||
public override int ComputeItemID()
|
||||
{
|
||||
if (!IsEmpty)
|
||||
{
|
||||
return 0x9C8;
|
||||
}
|
||||
public override int ComputeItemID() => !IsEmpty ? 0x9C8 : 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CeramicMug : BaseBeverage
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class CeramicMug : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public CeramicMug() => Weight = 1.0;
|
||||
|
||||
[Constructible]
|
||||
public CeramicMug(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public CeramicMug(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public CeramicMug(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int BaseLabelNumber => 1042982; // a ceramic mug of Ale
|
||||
public override int MaxQuantity => 1;
|
||||
|
||||
public override int ComputeItemID()
|
||||
{
|
||||
if (ItemID >= 0x995 && ItemID <= 0x999)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
public override int ComputeItemID() => ItemID is (< 0x995 or > 0x999) and not 0x9CA ? 0x995 : ItemID;
|
||||
}
|
||||
|
||||
if (ItemID == 0x9CA)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x995;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PewterMug : BaseBeverage
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class PewterMug : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public PewterMug() => Weight = 1.0;
|
||||
|
||||
[Constructible]
|
||||
public PewterMug(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public PewterMug(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public PewterMug(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int BaseLabelNumber => 1042994; // a pewter mug with Ale
|
||||
public override int MaxQuantity => 1;
|
||||
|
||||
public override int ComputeItemID()
|
||||
{
|
||||
if (ItemID >= 0xFFF && ItemID <= 0x1002)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
public override int ComputeItemID() => ItemID is >= 0xFFF and <= 0x1002 ? ItemID : 0xFFF;
|
||||
}
|
||||
|
||||
return 0xFFF;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class Goblet : BaseBeverage
|
||||
{
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Goblet : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public Goblet() => Weight = 1.0;
|
||||
|
||||
[Constructible]
|
||||
public Goblet(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public Goblet(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public Goblet(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int BaseLabelNumber => 1043000; // a goblet of Ale
|
||||
public override int MaxQuantity => 1;
|
||||
|
||||
public override int ComputeItemID()
|
||||
{
|
||||
if (ItemID is 0x99A or 0x9B3 or 0x9BF or 0x9CB)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
public override int ComputeItemID() => ItemID is 0x99A or 0x9B3 or 0x9BF or 0x9CB ? ItemID : 0x99A;
|
||||
}
|
||||
|
||||
return 0x99A;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
[TypeAlias(
|
||||
[TypeAlias(
|
||||
"Server.Items.MugAle",
|
||||
"Server.Items.GlassCider",
|
||||
"Server.Items.GlassLiquor",
|
||||
"Server.Items.GlassMilk",
|
||||
"Server.Items.GlassWine",
|
||||
"Server.Items.GlassWater"
|
||||
)]
|
||||
public class GlassMug : BaseBeverage
|
||||
{
|
||||
)]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class GlassMug : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public GlassMug() => Weight = 1.0;
|
||||
|
||||
[Constructible]
|
||||
public GlassMug(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 1.0;
|
||||
|
||||
public GlassMug(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public GlassMug(BeverageType type) : base(type) => Weight = 1.0;
|
||||
|
||||
public override int EmptyLabelNumber => 1022456; // mug
|
||||
public override int BaseLabelNumber => 1042976; // a mug of Ale
|
||||
|
|
@ -316,80 +146,23 @@ namespace Server.Items
|
|||
{
|
||||
if (IsEmpty)
|
||||
{
|
||||
return ItemID >= 0x1F81 && ItemID <= 0x1F84 ? ItemID : 0x1F81;
|
||||
return ItemID is >= 0x1F81 and <= 0x1F84 ? ItemID : 0x1F81;
|
||||
}
|
||||
|
||||
return Content switch
|
||||
{
|
||||
BeverageType.Ale => ItemID == 0x9EF ? 0x9EF : 0x9EE,
|
||||
BeverageType.Cider => ItemID >= 0x1F7D && ItemID <= 0x1F80 ? ItemID : 0x1F7D,
|
||||
BeverageType.Liquor => ItemID >= 0x1F85 && ItemID <= 0x1F88 ? ItemID : 0x1F85,
|
||||
BeverageType.Milk => ItemID >= 0x1F89 && ItemID <= 0x1F8C ? ItemID : 0x1F89,
|
||||
BeverageType.Wine => ItemID >= 0x1F8D && ItemID <= 0x1F90 ? ItemID : 0x1F8D,
|
||||
BeverageType.Water => ItemID >= 0x1F91 && ItemID <= 0x1F94 ? ItemID : 0x1F91,
|
||||
BeverageType.Cider => Math.Clamp(ItemID, 0x1F7D, 0x1F80),
|
||||
BeverageType.Liquor => Math.Clamp(ItemID, 0x1F85, 0x1F88),
|
||||
BeverageType.Milk => Math.Clamp(ItemID, 0x1F89, 0x1F8C),
|
||||
BeverageType.Wine => Math.Clamp(ItemID, 0x1F8D, 0x1F90),
|
||||
BeverageType.Water => Math.Clamp(ItemID, 0x1F91, 0x1F94),
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (CheckType("MugAle"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Ale;
|
||||
}
|
||||
else if (CheckType("GlassCider"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Cider;
|
||||
}
|
||||
else if (CheckType("GlassLiquor"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Liquor;
|
||||
}
|
||||
else if (CheckType("GlassMilk"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Milk;
|
||||
}
|
||||
else if (CheckType("GlassWine"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Wine;
|
||||
}
|
||||
else if (CheckType("GlassWater"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Water;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid beverage type");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TypeAlias(
|
||||
[TypeAlias(
|
||||
"Server.Items.PitcherAle",
|
||||
"Server.Items.PitcherCider",
|
||||
"Server.Items.PitcherLiquor",
|
||||
|
|
@ -397,21 +170,15 @@ namespace Server.Items
|
|||
"Server.Items.PitcherWine",
|
||||
"Server.Items.PitcherWater",
|
||||
"Server.Items.GlassPitcher"
|
||||
)]
|
||||
public class Pitcher : BaseBeverage
|
||||
{
|
||||
)]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Pitcher : BaseBeverage
|
||||
{
|
||||
[Constructible]
|
||||
public Pitcher() => Weight = 2.0;
|
||||
|
||||
[Constructible]
|
||||
public Pitcher(BeverageType type)
|
||||
: base(type) =>
|
||||
Weight = 2.0;
|
||||
|
||||
public Pitcher(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public Pitcher(BeverageType type) : base(type) => Weight = 2.0;
|
||||
|
||||
public override int BaseLabelNumber => 1048128; // a Pitcher of Ale
|
||||
public override int MaxQuantity => 5;
|
||||
|
|
@ -420,148 +187,26 @@ namespace Server.Items
|
|||
{
|
||||
if (IsEmpty)
|
||||
{
|
||||
if (ItemID is 0x9A7 or 0xFF7)
|
||||
{
|
||||
return ItemID;
|
||||
return ItemID is 0x9A7 or 0xFF7 ? ItemID : 0xFF6;
|
||||
}
|
||||
|
||||
return 0xFF6;
|
||||
return Content switch
|
||||
{
|
||||
BeverageType.Ale => ItemID == 0x1F96 ? ItemID : 0x1F95,
|
||||
BeverageType.Cider => ItemID == 0x1F98 ? ItemID : 0x1F97,
|
||||
BeverageType.Liquor => ItemID == 0x1F9A ? ItemID : 0x1F99,
|
||||
BeverageType.Milk => ItemID == 0x9AD ? ItemID : 0x9F0,
|
||||
BeverageType.Wine => ItemID == 0x1F9C ? ItemID : 0x1F9B,
|
||||
BeverageType.Water => ItemID is 0xFF8 or 0xFF9 or 0x1F9E ? ItemID : 0x1F9D,
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
switch (Content)
|
||||
{
|
||||
case BeverageType.Ale:
|
||||
{
|
||||
if (ItemID == 0x1F96)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x1F95;
|
||||
}
|
||||
case BeverageType.Cider:
|
||||
{
|
||||
if (ItemID == 0x1F98)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x1F97;
|
||||
}
|
||||
case BeverageType.Liquor:
|
||||
{
|
||||
if (ItemID == 0x1F9A)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x1F99;
|
||||
}
|
||||
case BeverageType.Milk:
|
||||
{
|
||||
if (ItemID == 0x9AD)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x9F0;
|
||||
}
|
||||
case BeverageType.Wine:
|
||||
{
|
||||
if (ItemID == 0x1F9C)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x1F9B;
|
||||
}
|
||||
case BeverageType.Water:
|
||||
{
|
||||
if (ItemID is 0xFF8 or 0xFF9 or 0x1F9E)
|
||||
{
|
||||
return ItemID;
|
||||
}
|
||||
|
||||
return 0x1F9D;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
if (CheckType("PitcherWater") || CheckType("GlassPitcher"))
|
||||
{
|
||||
InternalDeserialize(reader, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
InternalDeserialize(reader, true);
|
||||
}
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (CheckType("PitcherAle"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Ale;
|
||||
}
|
||||
else if (CheckType("PitcherCider"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Cider;
|
||||
}
|
||||
else if (CheckType("PitcherLiquor"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Liquor;
|
||||
}
|
||||
else if (CheckType("PitcherMilk"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Milk;
|
||||
}
|
||||
else if (CheckType("PitcherWine"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Wine;
|
||||
}
|
||||
else if (CheckType("PitcherWater"))
|
||||
{
|
||||
Quantity = MaxQuantity;
|
||||
Content = BeverageType.Water;
|
||||
}
|
||||
else if (CheckType("GlassPitcher"))
|
||||
{
|
||||
Quantity = 0;
|
||||
Content = BeverageType.Water;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid beverage type");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class BaseBeverage : Item, IHasQuantity
|
||||
{
|
||||
private static readonly int[] m_SwampTiles =
|
||||
[SerializationGenerator(2, false)]
|
||||
public abstract partial class BaseBeverage : Item, IHasQuantity
|
||||
{
|
||||
private readonly int[] _swampTiles =
|
||||
{
|
||||
0x9C4, 0x9EB,
|
||||
0x3D65, 0x3D65,
|
||||
|
|
@ -574,37 +219,31 @@ namespace Server.Items
|
|||
|
||||
private static readonly Dictionary<Mobile, Timer> m_Table = new();
|
||||
|
||||
private BeverageType m_Content;
|
||||
private int m_Quantity;
|
||||
[SerializableField(0)]
|
||||
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
|
||||
private Poison _poison;
|
||||
|
||||
[SerializableField(1)]
|
||||
[SerializableFieldAttr("[CommandProperty(AccessLevel.GameMaster)]")]
|
||||
private Mobile _poisoner;
|
||||
|
||||
[SerializableField(2, getter: "private", setter: "private")]
|
||||
private BeverageType _rawContent;
|
||||
|
||||
[SerializableField(3, getter: "private", setter: "private")]
|
||||
private int _rawQuantity;
|
||||
|
||||
public BaseBeverage() => ItemID = ComputeItemID();
|
||||
|
||||
public BaseBeverage(BeverageType type)
|
||||
{
|
||||
m_Content = type;
|
||||
m_Quantity = MaxQuantity;
|
||||
_rawContent = type;
|
||||
_rawQuantity = MaxQuantity;
|
||||
ItemID = ComputeItemID();
|
||||
}
|
||||
|
||||
public BaseBeverage(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
var num = BaseLabelNumber;
|
||||
|
||||
if (IsEmpty || num == 0)
|
||||
{
|
||||
return EmptyLabelNumber;
|
||||
}
|
||||
|
||||
return BaseLabelNumber + (int)m_Content;
|
||||
}
|
||||
}
|
||||
public override int LabelNumber =>
|
||||
IsEmpty || BaseLabelNumber == 0 ? EmptyLabelNumber : BaseLabelNumber + (int)_rawContent;
|
||||
|
||||
public virtual bool ShowQuantity => MaxQuantity > 1;
|
||||
public virtual bool Fillable => true;
|
||||
|
|
@ -616,27 +255,21 @@ namespace Server.Items
|
|||
public abstract int MaxQuantity { get; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool IsEmpty => m_Quantity <= 0;
|
||||
public bool IsEmpty => _rawQuantity <= 0;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool ContainsAlchohol => !IsEmpty && m_Content != BeverageType.Milk && m_Content != BeverageType.Water;
|
||||
public bool ContainsAlcohol => !IsEmpty && _rawContent is not BeverageType.Milk and not BeverageType.Water;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool IsFull => m_Quantity >= MaxQuantity;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Poison Poison { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Mobile Poisoner { get; set; }
|
||||
public bool IsFull => _rawQuantity >= MaxQuantity;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public BeverageType Content
|
||||
{
|
||||
get => m_Content;
|
||||
get => _rawContent;
|
||||
set
|
||||
{
|
||||
m_Content = value;
|
||||
RawContent = value;
|
||||
|
||||
InvalidateProperties();
|
||||
|
||||
|
|
@ -656,10 +289,10 @@ namespace Server.Items
|
|||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Quantity
|
||||
{
|
||||
get => m_Quantity;
|
||||
get => _rawQuantity;
|
||||
set
|
||||
{
|
||||
m_Quantity = Math.Clamp(value, 0, MaxQuantity);
|
||||
RawQuantity = Math.Clamp(value, 0, MaxQuantity);
|
||||
|
||||
InvalidateProperties();
|
||||
|
||||
|
|
@ -680,24 +313,13 @@ namespace Server.Items
|
|||
|
||||
public virtual int GetQuantityDescription()
|
||||
{
|
||||
var perc = m_Quantity * 100 / MaxQuantity;
|
||||
|
||||
if (perc <= 0)
|
||||
return (_rawQuantity * 100 / MaxQuantity) switch
|
||||
{
|
||||
return 1042975; // It's empty.
|
||||
}
|
||||
|
||||
if (perc <= 33)
|
||||
{
|
||||
return 1042974; // It's nearly empty.
|
||||
}
|
||||
|
||||
if (perc <= 66)
|
||||
{
|
||||
return 1042973; // It's half full.
|
||||
}
|
||||
|
||||
return 1042972; // It's full.
|
||||
<= 0 => 1042975,
|
||||
<= 33 => 1042974,
|
||||
<= 66 => 1042973,
|
||||
_ => 1042972
|
||||
};
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
|
|
@ -809,7 +431,7 @@ namespace Server.Items
|
|||
src = component.Addon as IWaterSource;
|
||||
}
|
||||
|
||||
if (src == null || src.Quantity <= 0)
|
||||
if (src is not { Quantity: > 0 })
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -865,18 +487,17 @@ namespace Server.Items
|
|||
{
|
||||
var contains = false;
|
||||
|
||||
for (var i = 0; !contains && i < m_SwampTiles.Length; i += 2)
|
||||
for (var i = 0; !contains && i < _swampTiles.Length; i += 2)
|
||||
{
|
||||
contains = tileID >= m_SwampTiles[i] && tileID <= m_SwampTiles[i + 1];
|
||||
contains = tileID >= _swampTiles[i] && tileID <= _swampTiles[i + 1];
|
||||
}
|
||||
|
||||
if (contains)
|
||||
{
|
||||
Delete();
|
||||
|
||||
player.SendLocalizedMessage(
|
||||
1055035
|
||||
); // You dip the container into the disgusting swamp water, collecting enough for the Hag's vile stew.
|
||||
// You dip the container into the disgusting swamp water, collecting enough for the Hag's vile stew.
|
||||
player.SendLocalizedMessage(1055035);
|
||||
obj.Complete();
|
||||
}
|
||||
}
|
||||
|
|
@ -933,7 +554,7 @@ namespace Server.Items
|
|||
from.Thirst += 1;
|
||||
}
|
||||
|
||||
if (ContainsAlchohol)
|
||||
if (ContainsAlcohol)
|
||||
{
|
||||
var bac = Content switch
|
||||
{
|
||||
|
|
@ -989,9 +610,7 @@ namespace Server.Items
|
|||
component.Addon is WaterVatEast or WaterVatSouth &&
|
||||
Content == BeverageType.Water)
|
||||
{
|
||||
if (from is PlayerMobile player)
|
||||
{
|
||||
if (player.Quest is SolenMatriarchQuest qs)
|
||||
if (from is PlayerMobile { Quest: SolenMatriarchQuest qs })
|
||||
{
|
||||
QuestObjective obj = qs.FindObjective<GatherWaterObjective>();
|
||||
|
||||
|
|
@ -1018,7 +637,6 @@ namespace Server.Items
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(500846); // Can't pour it there.
|
||||
|
|
@ -1093,52 +711,12 @@ namespace Server.Items
|
|||
return false;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
private void Deserialize(IGenericReader reader, int version)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write(Poisoner);
|
||||
|
||||
writer.Write(Poison);
|
||||
writer.Write((int)m_Content);
|
||||
writer.Write(m_Quantity);
|
||||
}
|
||||
|
||||
protected bool CheckType(string name) => GetType().FullName == $"Server.Items.{name}";
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
InternalDeserialize(reader, true);
|
||||
}
|
||||
|
||||
protected void InternalDeserialize(IGenericReader reader, bool read)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
if (!read)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
Poisoner = reader.ReadEntity<Mobile>();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
Poison = reader.ReadPoison();
|
||||
m_Content = (BeverageType)reader.ReadInt();
|
||||
m_Quantity = reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
_poison = reader.ReadPoison();
|
||||
_poisoner = reader.ReadEntity<Mobile>();
|
||||
_rawContent = (BeverageType)reader.ReadInt();
|
||||
_rawQuantity = reader.ReadInt();
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
|
|
@ -1165,10 +743,7 @@ namespace Server.Items
|
|||
from.BAC = 60;
|
||||
}
|
||||
|
||||
Timer t = new HeaveTimer(from);
|
||||
t.Start();
|
||||
|
||||
m_Table[from] = t;
|
||||
m_Table[from] = new HeaveTimer(from).Start();
|
||||
}
|
||||
else if (m_Table.Remove(from, out var t))
|
||||
{
|
||||
|
|
@ -1182,11 +757,8 @@ namespace Server.Items
|
|||
{
|
||||
private readonly Mobile m_Drunk;
|
||||
|
||||
public HeaveTimer(Mobile drunk)
|
||||
: base(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(5.0))
|
||||
{
|
||||
public HeaveTimer(Mobile drunk) : base(TimeSpan.FromSeconds(5.0), TimeSpan.FromSeconds(5.0)) =>
|
||||
m_Drunk = drunk;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
|
|
@ -1237,5 +809,4 @@ namespace Server.Items
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.AwaseMisoSoup"
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"version": 2,
|
||||
"type": "Server.Items.BaseBeverage",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Poison",
|
||||
"type": "Server.Poison",
|
||||
"rule": "PrimitiveUOTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Poison"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Poisoner",
|
||||
"type": "Server.Mobile",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "RawContent",
|
||||
"type": "Server.Items.BeverageType",
|
||||
"rule": "EnumMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "RawQuantity",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.BentoBox"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.BeverageBottle"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.CeramicMug"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.EmptyBentoBox"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.GlassMug"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.Goblet"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.GreenTea"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.GreenTeaBasket"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Items.Jug.v0.json
Normal file
4
Projects/UOContent/Migrations/Server.Items.Jug.v0.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.Jug"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.MisoSoup"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.PewterMug"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.Pitcher"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.RedMisoSoup"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.SushiPlatter"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.SushiRolls"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.Wasabi"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.WasabiClumps"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.WhiteMisoSoup"
|
||||
}
|
||||
|
|
@ -158,8 +158,8 @@ namespace Server
|
|||
|
||||
AOS.Damage(m_Mobile, From, damage, 0, 0, 0, 100, 0);
|
||||
|
||||
if (Utility.RandomDouble() >= 0.60
|
||||
) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
|
||||
// OSI: randomly revealed between first and third damage tick, guessing 60% chance
|
||||
if (Utility.RandomDouble() >= 0.60)
|
||||
{
|
||||
m_Mobile.RevealingAction();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue