Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

582 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using Server.Commands;
using Server.ContextMenus;
using Server.Items;
using Server.Multis;
namespace Server.ACC.YS
{
public class YardGate : BaseDoor
{
#region Properties
private Mobile m_Placer;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer
{
get { return m_Placer; }
set { m_Placer = value; }
}
private int m_Price;
[CommandProperty(AccessLevel.GameMaster)]
public int Price
{
get { return m_Price; }
set { m_Price = value; }
}
private BaseHouse m_House;
[CommandProperty(AccessLevel.GameMaster)]
public BaseHouse House
{
get { return m_House; }
set { m_House = value; }
}
#endregion
#region Constructors
public YardGate(int itemID, Mobile placer, int price, BaseHouse house, Point3D location, DoorFacing facing)
: base(itemID, itemID + 1, GetOpenedSound(itemID), GetClosedSound(itemID), BaseDoor.GetOffset(facing))
{
Placer = placer;
Price = price;
Movable = false;
MoveToWorld(location, placer.Map);
if (house == null)
{
FindHouseOfPlacer();
}
else
{
House = house;
}
SetName();
}
public YardGate(Serial serial)
: base(serial)
{
}
#endregion
#region Overrides
public override void Use(Mobile from)
{
if (Locked && from == Placer)
{
Locked = false;
from.SendMessage("You quickly unlock your gate, enter, and lock it behind you");
base.Use(from);
Locked = true;
}
else if (Locked && from != Placer)
{
from.SendMessage("You are not wanted here. Please go away!");
}
else
{
base.Use(from);
}
}
public override void GetContextMenuEntries(Mobile from, System.Collections.Generic.List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
if (m_Placer == null || from == m_Placer || from.AccessLevel >= AccessLevel.GameMaster)
{
list.Add(new YardSecurityEntry(from, this));
list.Add(new RefundEntry(from, this, m_Price));
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
if (House == null || House.Deleted)
{
writer.Write(false);
YardSystem.AddOrphanedItem(this);
}
else
{
writer.Write(true);
writer.Write(House);
}
writer.WriteMobile(Placer);
writer.Write(Price);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (reader.ReadBool())
{
House = reader.ReadItem() as BaseHouse;
}
Placer = reader.ReadMobile();
Price = reader.ReadInt();
if (House == null)
{
FindHouseOfPlacer();
if (House == null)
{
Refund();
}
}
}
#endregion
#region Methods
public void SetName()
{
switch (ItemID)
{
case 0x824:
Name = Placer.Name + "'s Gate"; break;
case 0x84C:
Name = Placer.Name + "'s Gate"; break;
case 0x839:
Name = Placer.Name + "'s Gate"; break;
case 0x866:
Name = Placer.Name + "'s Gate"; break;
case 0x675:
Name = Placer.Name + "'s Door"; break;
case 0x6C5:
Name = Placer.Name + "'s Door"; break;
case 0x685:
Name = Placer.Name + "'s Door"; break;
case 0x1FED:
Name = Placer.Name + "'s Door"; break;
case 0x695:
Name = Placer.Name + "'s Door"; break;
case 0x6A5:
Name = Placer.Name + "'s Door"; break;
case 0x6B5:
Name = Placer.Name + "'s Door"; break;
case 0x6D5:
Name = Placer.Name + "'s Door"; break;
case 0x6EF:
Name = Placer.Name + "'s Door"; break;
default:
Name = Placer.Name + "'s Gate"; break;
}
}
public void Refund()
{
Gold toGive = new Gold(Price);
if (Placer.BankBox.TryDropItem(Placer, toGive, false))
{
Delete();
Placer.SendLocalizedMessage(1060397, toGive.Amount.ToString()); // ~1_AMOUNT~ gold has been deposited into your bank box.
}
else
{
toGive.Delete();
Placer.SendMessage("Your bankbox is full!");
}
}
public void FindHouseOfPlacer()
{
if (Placer == null || House != null)
{
return;
}
IPooledEnumerable eable = Map.GetItemsInRange(Location, 20);
foreach (Item item in eable)
{
if (item is BaseHouse)
{
BaseHouse house = (BaseHouse)item;
if (house.Owner == Placer)
{
House = house;
return;
}
}
}
}
#endregion
#region Static
public static int GetClosedSound(int itemID)
{
if ((itemID >= 2084 && itemID <= 2098) ||
(itemID >= 2124 && itemID <= 2138))
{
return 243;
}
else if ((itemID >= 2105 && itemID <= 2119) ||
(itemID >= 2150 && itemID <= 2162))
{
return 242;
}
else
{
return 243;
}
}
public static int GetOpenedSound(int itemID)
{
if ((itemID >= 2084 && itemID <= 2098) ||
(itemID >= 2124 && itemID <= 2138))
{
return 236;
}
else if ((itemID >= 2105 && itemID <= 2119) ||
(itemID >= 2150 && itemID <= 2162))
{
return 235;
}
else
{
return 236;
}
}
#endregion
}
#region Old Gates
public class YardIronGate : IronGate
{
private Mobile m_Placer;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer
{
get { return m_Placer; }
set { m_Placer = value; }
}
private int m_Price;
public int Price
{
get { return m_Price; }
set { m_Price = value; }
}
[Constructable]
public YardIronGate(Mobile from, int price, DoorFacing facing, Point3D loc)
: base(facing)
{
Price = price;
Placer = from;
Movable = false;
MoveToWorld(loc, from.Map);
Name = from.Name + "'s Gate";
}
public override void Use(Mobile from)
{
if (((BaseDoor)this).Locked && from == Placer)
{
((BaseDoor)this).Locked = false;
from.SendMessage("You quickly unlock your gate, enter, and lock it behind you");
base.Use(from);
((BaseDoor)this).Locked = true;
}
else if (((BaseDoor)this).Locked && from != Placer)
{
from.SendMessage("You are not wanted here. Please go away!");
}
else
{
base.Use(from);
}
}
public YardIronGate(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.WriteMobile(Placer);
writer.Write(Price);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Placer = reader.ReadMobile();
Price = reader.ReadInt();
Console.WriteLine();
Console.Write("Updating YardIronGate...");
YardGate newGate = new YardGate(2084, Placer, Price, null, Location, (DoorFacing)((ClosedID - 2084) / 2));
newGate.Map = Map;
if (newGate != null)
{
Console.WriteLine(String.Format("New gate = {0}, ItemID = {1}, Location = {2}", newGate.Serial.ToString(), newGate.ItemID, newGate.Location));
}
else
{
Console.WriteLine("Null");
}
Delete();
}
}
public class YardShortIronGate : IronGateShort
{
private Mobile m_Placer;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer
{
get { return m_Placer; }
set { m_Placer = value; }
}
private int m_Price;
public int Price
{
get { return m_Price; }
set { m_Price = value; }
}
[Constructable]
public YardShortIronGate(Mobile from, int price, DoorFacing facing, Point3D loc)
: base(facing)
{
Price = price;
Placer = from;
Movable = false;
MoveToWorld(loc, from.Map);
Name = from.Name + "'s Gate";
}
public override void Use(Mobile from)
{
if (((BaseDoor)this).Locked && from == Placer)
{
((BaseDoor)this).Locked = false;
from.SendMessage("You quickly unlock your gate, enter, and lock it behind you");
base.Use(from);
((BaseDoor)this).Locked = true;
}
else if (((BaseDoor)this).Locked && from != Placer)
{
from.SendMessage("You are not wanted here. Please go away!");
}
else
{
base.Use(from);
}
}
public YardShortIronGate(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.WriteMobile(Placer);
writer.Write(Price);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Placer = reader.ReadMobile();
Price = reader.ReadInt();
Console.WriteLine();
Console.Write("Updating YardShortIronGate...");
YardGate newGate = new YardGate(2124, Placer, Price, null, Location, (DoorFacing)((ClosedID - 2124) / 2));
newGate.Map = Map;
if (newGate != null)
{
Console.WriteLine(String.Format("New gate = {0}, ItemID = {1}, Location = {2}", newGate.Serial.ToString(), newGate.ItemID, newGate.Location));
}
else
{
Console.WriteLine("Null");
}
Delete();
}
}
public class YardLightWoodGate : LightWoodGate
{
private Mobile m_Placer;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer
{
get { return m_Placer; }
set { m_Placer = value; }
}
private int m_Price;
public int Price
{
get { return m_Price; }
set { m_Price = value; }
}
[Constructable]
public YardLightWoodGate(Mobile from, int price, DoorFacing facing, Point3D loc)
: base(facing)
{
Price = price;
Placer = from;
Movable = false;
MoveToWorld(loc, from.Map);
Name = from.Name + "'s Gate";
}
public override void Use(Mobile from)
{
if (((BaseDoor)this).Locked && from == Placer)
{
((BaseDoor)this).Locked = false;
from.SendMessage("You quickly unlock your gate, enter, and lock it behind you");
base.Use(from);
((BaseDoor)this).Locked = true;
}
else if (((BaseDoor)this).Locked && from != Placer)
{
from.SendMessage("You are not wanted here. Please go away!");
}
else
{
base.Use(from);
}
}
public YardLightWoodGate(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.WriteMobile(Placer);
writer.Write(Price);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Placer = reader.ReadMobile();
Price = reader.ReadInt();
Console.WriteLine();
Console.Write("Updating YardLightWoodGate...");
YardGate newGate = new YardGate(2105, Placer, Price, null, Location, (DoorFacing)((ClosedID - 2105) / 2));
newGate.Map = Map;
if (newGate != null)
{
Console.WriteLine(String.Format("New gate = {0}, ItemID = {1}, Location = {2}", newGate.Serial.ToString(), newGate.ItemID, newGate.Location));
}
else
{
Console.WriteLine("Null");
}
Delete();
}
}
public class YardDarkWoodGate : DarkWoodGate
{
private Mobile m_Placer;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer
{
get { return m_Placer; }
set { m_Placer = value; }
}
private int m_Price;
public int Price
{
get { return m_Price; }
set { m_Price = value; }
}
[Constructable]
public YardDarkWoodGate(Mobile from, int price, DoorFacing facing, Point3D loc)
: base(facing)
{
Price = price;
Placer = from;
Movable = false;
MoveToWorld(loc, from.Map);
Name = from.Name + "'s Gate";
}
public override void Use(Mobile from)
{
if (((BaseDoor)this).Locked && from == Placer)
{
((BaseDoor)this).Locked = false;
from.SendMessage("You quickly unlock your gate, enter, and lock it behind you");
base.Use(from);
((BaseDoor)this).Locked = true;
}
else if (((BaseDoor)this).Locked && from != Placer)
{
from.SendMessage("You are not wanted here. Please go away!");
}
else
{
base.Use(from);
}
}
public YardDarkWoodGate(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Placer);
writer.Write(Price);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Placer = reader.ReadMobile();
Price = reader.ReadInt();
Console.WriteLine();
Console.Write("Updating YardDarkWoodGate...");
YardGate newGate = new YardGate(2150, Placer, Price, null, Location, (DoorFacing)((ClosedID - 2150) / 2));
newGate.Map = Map;
if (newGate != null)
{
Console.WriteLine(String.Format("New gate = {0}, ItemID = {1}, Location = {2}", newGate.Serial.ToString(), newGate.ItemID, newGate.Location));
}
else
{
Console.WriteLine("Null");
}
Delete();
}
}
#endregion
}