348 lines
9.2 KiB
C#
348 lines
9.2 KiB
C#
using System;
|
|
using Server.Gumps;
|
|
using Server.Multis;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class EnchantedWheelbarrow : Item, IFlipable, ISecurable
|
|
{
|
|
public override int LabelNumber { get { return 1125214; } } // enchanted wheelbarrow
|
|
|
|
private bool m_Harvest;
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool Harvest
|
|
{
|
|
get { return m_Harvest; }
|
|
set
|
|
{
|
|
|
|
if (value && (ItemID == 0xA0E6 || ItemID == 0xA0E7))
|
|
ItemID = ItemID + 2;
|
|
else if (ItemID == 0xA0E8 || ItemID == 0xA0E9)
|
|
ItemID = ItemID - 2;
|
|
|
|
m_Harvest = value;
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public SecureLevel Level { get; set; }
|
|
|
|
private Timer m_Timer;
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public DateTime NextHarvest { get; set; }
|
|
|
|
private static Type[] DecorativePlants = new Type[]
|
|
{
|
|
typeof(DecorativePlant), typeof(DecorativePlantWhiteFlowers), typeof(DecorativePlantVines),
|
|
typeof(DecorativePlantFlax), typeof(DecorativePlantPoppies), typeof(DecorativePlantLilypad)
|
|
};
|
|
|
|
[Constructable]
|
|
public EnchantedWheelbarrow()
|
|
: base(0xA0E6)
|
|
{
|
|
Harvest = true;
|
|
Weight = 5.0;
|
|
}
|
|
|
|
public void StopTimer()
|
|
{
|
|
if (m_Timer != null)
|
|
m_Timer.Stop();
|
|
|
|
m_Timer = null;
|
|
}
|
|
|
|
public void StartTimer()
|
|
{
|
|
if (m_Timer != null)
|
|
return;
|
|
|
|
m_Timer = Timer.DelayCall(TimeSpan.FromHours(1.0), TimeSpan.FromHours(1.0), new TimerCallback(OnTick));
|
|
}
|
|
|
|
public void OnTick()
|
|
{
|
|
if (Harvest)
|
|
{
|
|
StopTimer();
|
|
}
|
|
else
|
|
{
|
|
if (NextHarvest < DateTime.UtcNow)
|
|
{
|
|
Harvest = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool CheckAccessible(Mobile from, Item item)
|
|
{
|
|
if (from.AccessLevel >= AccessLevel.GameMaster)
|
|
return true; // Staff can access anything
|
|
|
|
BaseHouse house = BaseHouse.FindHouseAt(item);
|
|
|
|
if (house == null)
|
|
return false;
|
|
|
|
switch (Level)
|
|
{
|
|
case SecureLevel.Owner: return house.IsOwner(from);
|
|
case SecureLevel.CoOwners: return house.IsCoOwner(from);
|
|
case SecureLevel.Friends: return house.IsFriend(from);
|
|
case SecureLevel.Anyone: return true;
|
|
case SecureLevel.Guild: return house.IsGuildMember(from);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public void OnFlip(Mobile from)
|
|
{
|
|
if (ItemID == 0xA0E6 || ItemID == 0xA0E8)
|
|
ItemID = ItemID + 1;
|
|
else
|
|
ItemID = ItemID - 1;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile m)
|
|
{
|
|
if (!m.InRange(GetWorldLocation(), 3))
|
|
{
|
|
m.LocalOverheadMessage(Network.MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
|
}
|
|
else if (!IsLockedDown)
|
|
{
|
|
m.SendLocalizedMessage(1114298); // This must be locked down in order to use it.
|
|
}
|
|
else
|
|
{
|
|
if (CheckAccessible(m, this))
|
|
{
|
|
if (Harvest)
|
|
{
|
|
Item i = Activator.CreateInstance(DecorativePlants[Utility.Random(DecorativePlants.Length)]) as Item;
|
|
|
|
if (i != null)
|
|
{
|
|
m.LocalOverheadMessage(Network.MessageType.Regular, 0x3B2, 1158330); // *You collect a plant from the wheelbarrow*
|
|
m.AddToBackpack(i);
|
|
Harvest = false;
|
|
NextHarvest = DateTime.UtcNow + TimeSpan.FromDays(7);
|
|
StartTimer();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m.SendLocalizedMessage(1158329); // There is nothing to harvest.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public EnchantedWheelbarrow(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
|
|
writer.Write((bool)m_Harvest);
|
|
writer.Write((int)Level);
|
|
writer.Write((DateTime)NextHarvest);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
|
|
m_Harvest = reader.ReadBool();
|
|
Level = (SecureLevel)reader.ReadInt();
|
|
NextHarvest = reader.ReadDateTime();
|
|
|
|
if (!Harvest)
|
|
StartTimer();
|
|
}
|
|
}
|
|
|
|
public class DecorativePlant : Item
|
|
{
|
|
public override int LabelNumber { get { return 1125205; } } // decorative plant
|
|
|
|
private static readonly int[] DecorativePlants = new[]
|
|
{
|
|
0xA0E1, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0ED, 0xA11B, 0xA11C, 0xA11F, 0xA120, 0xA121, 0xA122, 0xA123, 0xA124, 0xA125, 0xA128, 0xA12B
|
|
};
|
|
|
|
[Constructable]
|
|
public DecorativePlant()
|
|
: base(DecorativePlants[Utility.Random(DecorativePlants.Length)])
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public DecorativePlant(int id)
|
|
: base(id)
|
|
{
|
|
}
|
|
|
|
public DecorativePlant(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Flipable(0xA0DD, 0xA0DE)]
|
|
public class DecorativePlantWhiteFlowers : DecorativePlant
|
|
{
|
|
[Constructable]
|
|
public DecorativePlantWhiteFlowers()
|
|
: base(0xA0DD)
|
|
{
|
|
}
|
|
|
|
public DecorativePlantWhiteFlowers(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Flipable(0xA0DF, 0xA0E0)]
|
|
public class DecorativePlantVines : DecorativePlant
|
|
{
|
|
[Constructable]
|
|
public DecorativePlantVines()
|
|
: base(0xA0DF)
|
|
{
|
|
}
|
|
|
|
public DecorativePlantVines(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Flipable(0xA11D, 0xA11E)]
|
|
public class DecorativePlantFlax : DecorativePlant
|
|
{
|
|
[Constructable]
|
|
public DecorativePlantFlax()
|
|
: base(0xA11D)
|
|
{
|
|
}
|
|
|
|
public DecorativePlantFlax(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Flipable(0xA126, 0xA127)]
|
|
public class DecorativePlantPoppies : DecorativePlant
|
|
{
|
|
[Constructable]
|
|
public DecorativePlantPoppies()
|
|
: base(0xA126)
|
|
{
|
|
}
|
|
|
|
public DecorativePlantPoppies(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Flipable(0xA129, 0xA12A)]
|
|
public class DecorativePlantLilypad : DecorativePlant
|
|
{
|
|
[Constructable]
|
|
public DecorativePlantLilypad()
|
|
: base(0xA129)
|
|
{
|
|
}
|
|
|
|
public DecorativePlantLilypad(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
}
|
|
}
|
|
}
|