Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Engines.Plants
|
||||
{
|
||||
public class MaginciaPlantItem : PlantItem
|
||||
{
|
||||
public override bool MaginciaPlant { get { return true; } }
|
||||
public override int BowlOfDirtID { get { return 2323; } }
|
||||
public override int GreenBowlID
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PlantStatus <= PlantStatus.Stage3)
|
||||
return 0xC7E;
|
||||
else
|
||||
return 0xC62;
|
||||
}
|
||||
}
|
||||
|
||||
public override int ContainerLocalization { get { return 1150436; } } // mound of dirt
|
||||
public override int OnPlantLocalization { get { return 1150442; } } // You plant the seed in the mound of dirt.
|
||||
public override int CantUseLocalization { get { return 501648; } } // You cannot use this unless you are the owner.
|
||||
|
||||
public override int LabelNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
int label = base.LabelNumber;
|
||||
|
||||
if (label == 1029913)
|
||||
label = 1022321; // patch of dirt
|
||||
|
||||
return label;
|
||||
}
|
||||
}
|
||||
|
||||
private DateTime m_Planted;
|
||||
private DateTime m_Contract;
|
||||
private Timer m_Timer;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Mobile Owner { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime Planted { get { return m_Planted; } set { m_Planted = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime ContractTime { get { return m_Contract; } set { m_Contract = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime ContractEndTime => ContractTime + TimeSpan.FromDays(14);
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool IsContract => ContractEndTime > DateTime.UtcNow;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime SetToDecorative { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public override bool ValidGrowthLocation
|
||||
{
|
||||
get
|
||||
{
|
||||
return RootParent == null && !Movable;
|
||||
}
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MaginciaPlantItem()
|
||||
: this(false)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MaginciaPlantItem(bool fertile)
|
||||
: base(2323, fertile)
|
||||
{
|
||||
Movable = false;
|
||||
|
||||
Planted = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (PlantStatus >= PlantStatus.DecorativePlant)
|
||||
return;
|
||||
|
||||
Point3D loc = GetWorldLocation();
|
||||
|
||||
if (!from.InLOS(loc) || !from.InRange(loc, 2))
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 0x3E9, 1019045); // I can't reach that.
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IsUsableBy(from))
|
||||
{
|
||||
LabelTo(from, CantUseLocalization);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendGump(new MainPlantGump(this));
|
||||
}
|
||||
|
||||
public override bool IsUsableBy(Mobile from)
|
||||
{
|
||||
return RootParent == null && !Movable && Owner == from && IsAccessibleTo(from);
|
||||
}
|
||||
|
||||
public override void Die()
|
||||
{
|
||||
base.Die();
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromMinutes(Utility.RandomMinMax(2, 5)), new TimerCallback(Delete));
|
||||
}
|
||||
|
||||
public override void Delete()
|
||||
{
|
||||
if (Owner != null && PlantStatus < PlantStatus.DecorativePlant)
|
||||
MaginciaPlantSystem.OnPlantDelete(Owner, Map);
|
||||
|
||||
base.Delete();
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (Owner != null)
|
||||
{
|
||||
list.Add(1150474, string.Format("{0}\t{1}", "#1011345", Owner.Name)); // Planted in ~1_val~ by: ~2_val~
|
||||
list.Add(1150478, m_Planted.ToShortDateString());
|
||||
|
||||
if (IsContract)
|
||||
{
|
||||
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(ContractEndTime, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));
|
||||
list.Add(1155763, easternTime.ToString("MM-dd-yyyy HH:mm 'ET'")); // Gardening Contract Expires: ~1_TIME~
|
||||
}
|
||||
|
||||
if (PlantStatus == PlantStatus.DecorativePlant)
|
||||
list.Add(1150490, SetToDecorative.ToShortDateString()); // Date harvested: ~1_val~
|
||||
}
|
||||
}
|
||||
|
||||
public void StartTimer()
|
||||
{
|
||||
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(2), new TimerCallback(Delete));
|
||||
}
|
||||
|
||||
public override bool PlantSeed(Mobile from, Seed seed)
|
||||
{
|
||||
if (!CheckLocation(from, seed) || !base.PlantSeed(from, seed))
|
||||
return false;
|
||||
|
||||
if (m_Timer != null)
|
||||
{
|
||||
m_Timer.Stop();
|
||||
m_Timer = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool CheckLocation(Mobile from, Seed seed)
|
||||
{
|
||||
if (!BlocksMovement(seed))
|
||||
return true;
|
||||
|
||||
IPooledEnumerable eable = Map.GetItemsInRange(Location, 1);
|
||||
|
||||
foreach (Item item in eable)
|
||||
{
|
||||
if (item != this && item is MaginciaPlantItem)
|
||||
{
|
||||
if (((MaginciaPlantItem)item).BlocksMovement())
|
||||
{
|
||||
eable.Free();
|
||||
from.SendLocalizedMessage(1150434); // Plants that block movement cannot be planted next to other plants that block movement.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool BlocksMovement()
|
||||
{
|
||||
if (PlantStatus == PlantStatus.BowlOfDirt || PlantStatus == PlantStatus.DeadTwigs)
|
||||
return false;
|
||||
|
||||
PlantTypeInfo info = PlantTypeInfo.GetInfo(PlantType);
|
||||
ItemData data = TileData.ItemTable[info.ItemID & TileData.MaxItemValue];
|
||||
|
||||
TileFlag flags = data.Flags;
|
||||
|
||||
return (flags & TileFlag.Impassable) > 0;
|
||||
}
|
||||
|
||||
public static bool BlocksMovement(Seed seed)
|
||||
{
|
||||
PlantTypeInfo info = PlantTypeInfo.GetInfo(seed.PlantType);
|
||||
ItemData data = TileData.ItemTable[info.ItemID & TileData.MaxItemValue];
|
||||
|
||||
TileFlag flags = data.Flags;
|
||||
|
||||
return (flags & TileFlag.Impassable) > 0;
|
||||
}
|
||||
|
||||
public MaginciaPlantItem(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)1); // version
|
||||
|
||||
writer.Write(ContractTime);
|
||||
writer.Write(Owner);
|
||||
writer.Write(m_Planted);
|
||||
writer.Write(SetToDecorative);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
ContractTime = reader.ReadDateTime();
|
||||
Owner = reader.ReadMobile();
|
||||
m_Planted = reader.ReadDateTime();
|
||||
SetToDecorative = reader.ReadDateTime();
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
Owner = reader.ReadMobile();
|
||||
m_Planted = reader.ReadDateTime();
|
||||
SetToDecorative = reader.ReadDateTime();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (PlantStatus == PlantStatus.BowlOfDirt)
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user