329 lines
8.5 KiB
C#
329 lines
8.5 KiB
C#
using System;
|
|
using Server.Gumps;
|
|
using Server.Multis;
|
|
using Server.Network;
|
|
using Server.Targeting;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public enum AddonFacing
|
|
{
|
|
South = 0,
|
|
East = 1,
|
|
}
|
|
|
|
public class DragonHeadAddon : BaseAddon
|
|
{
|
|
public override BaseAddonDeed Deed { get { return new DragonHeadAddonDeed(); } }
|
|
|
|
public AddonFacing Facing { get; set; }
|
|
|
|
[Constructable]
|
|
public DragonHeadAddon()
|
|
: this(AddonFacing.South)
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public DragonHeadAddon(AddonFacing facing)
|
|
{
|
|
Facing = facing;
|
|
|
|
switch (facing)
|
|
{
|
|
case AddonFacing.South:
|
|
AddComponent(new DragonHeadComponent(0x2234), 0, 0, 10);
|
|
break;
|
|
case AddonFacing.East:
|
|
AddComponent(new DragonHeadComponent(0x2235), 0, 0, 10);
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
private class DragonHeadComponent : AddonComponent
|
|
{
|
|
public override bool NeedsWall { get { return true; } }
|
|
public override Point3D WallPosition
|
|
{
|
|
get
|
|
{
|
|
switch (ItemID)
|
|
{
|
|
default:
|
|
case 0x2234: return new Point3D(0, -1, 0);
|
|
case 0x2235: return new Point3D(-1, 0, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public DragonHeadComponent(int id)
|
|
: base(id)
|
|
{
|
|
}
|
|
|
|
public DragonHeadComponent(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public DragonHeadAddon(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class DragonHeadAddonDeed : BaseAddonDeed, IRewardOption
|
|
{
|
|
public override BaseAddon Addon { get { return new DragonHeadAddon(Facing); } }
|
|
|
|
private AddonFacing Facing { get; set; }
|
|
|
|
public override int LabelNumber { get { return 1080209; } } // Dragon Head
|
|
|
|
[Constructable]
|
|
public DragonHeadAddonDeed()
|
|
{
|
|
LootType = LootType.Blessed;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (IsChildOf(from.Backpack))
|
|
{
|
|
from.CloseGump(typeof(RewardOptionGump));
|
|
from.SendGump(new RewardOptionGump(this));
|
|
}
|
|
else
|
|
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
|
|
}
|
|
|
|
public DragonHeadAddonDeed(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();
|
|
}
|
|
|
|
public void GetOptions(RewardOptionList list)
|
|
{
|
|
list.Add((int)AddonFacing.South, 1080208);
|
|
list.Add((int)AddonFacing.East, 1080207);
|
|
}
|
|
|
|
|
|
public void OnOptionSelected(Mobile from, int choice)
|
|
{
|
|
Facing = (AddonFacing)choice;
|
|
|
|
if (!Deleted)
|
|
base.OnDoubleClick(from);
|
|
}
|
|
}
|
|
|
|
// old classes
|
|
[TypeAlias("Server.Items.DragonHead")]
|
|
public class DragonHeadOld : Item, IAddon
|
|
{
|
|
public override bool IsArtifact { get { return true; } }
|
|
|
|
[Constructable]
|
|
public DragonHeadOld()
|
|
: this(0x2234)
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public DragonHeadOld(int itemID)
|
|
: base(itemID)
|
|
{
|
|
Movable = false;
|
|
}
|
|
|
|
public DragonHeadOld(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool ForceShowProperties
|
|
{
|
|
get
|
|
{
|
|
return ObjectPropertyList.Enabled;
|
|
}
|
|
}
|
|
public Item Deed
|
|
{
|
|
get
|
|
{
|
|
return new DragonHeadAddonDeed();
|
|
}
|
|
}
|
|
public bool FacingEast
|
|
{
|
|
get
|
|
{
|
|
return ItemID == 0x2235;
|
|
}
|
|
}
|
|
|
|
void IChopable.OnChop(Mobile user)
|
|
{
|
|
OnDoubleClick(user);
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (from.InRange(Location, 2))
|
|
{
|
|
BaseHouse house = BaseHouse.FindHouseAt(this);
|
|
|
|
if (house != null && house.IsOwner(from))
|
|
{
|
|
from.CloseGump(typeof(RewardDemolitionGump));
|
|
from.SendGump(new RewardDemolitionGump(this, 1049783)); // Do you wish to re-deed this decoration?
|
|
}
|
|
else
|
|
from.SendLocalizedMessage(1049784); // You can only re-deed this decoration if you are the house owner or originally placed the decoration.
|
|
}
|
|
else
|
|
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
|
|
public bool CouldFit(IPoint3D p, Map map)
|
|
{
|
|
if (map == null || !map.CanFit(p.X, p.Y, p.Z, ItemData.Height))
|
|
return false;
|
|
|
|
if (FacingEast)
|
|
return BaseAddon.IsWall(p.X - 1, p.Y, p.Z, map); // west wall
|
|
else
|
|
return BaseAddon.IsWall(p.X, p.Y - 1, p.Z, map); // north wall
|
|
}
|
|
}
|
|
|
|
[TypeAlias("Server.Items.DragonHeadDeed")]
|
|
public class DragonHeadDeedOld : Item
|
|
{
|
|
public override int LabelNumber { get { return 1028756; } } // dragon head
|
|
|
|
[Constructable]
|
|
public DragonHeadDeedOld()
|
|
: base(0x14F0)
|
|
{
|
|
LootType = LootType.Blessed;
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public DragonHeadDeedOld(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt(0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
|
|
Timer.DelayCall(TimeSpan.FromSeconds(10), Replace);
|
|
}
|
|
|
|
private void Replace()
|
|
{
|
|
Container c = Parent as Container;
|
|
|
|
if (c != null)
|
|
{
|
|
var deed = new DragonHeadAddonDeed();
|
|
c.DropItem(deed);
|
|
}
|
|
else if (Parent == null)
|
|
{
|
|
Server.Multis.BaseHouse house = Server.Multis.BaseHouse.FindHouseAt(this);
|
|
|
|
var deed = new DragonHeadAddonDeed();
|
|
deed.MoveToWorld(Location, Map);
|
|
|
|
deed.IsLockedDown = IsLockedDown;
|
|
deed.IsSecure = IsSecure;
|
|
deed.Movable = Movable;
|
|
|
|
if (house != null && house.LockDowns.ContainsKey(this))
|
|
{
|
|
house.LockDowns.Remove(this);
|
|
house.LockDowns.Add(deed, house.Owner);
|
|
}
|
|
else if (house != null && house.IsSecure(this))
|
|
{
|
|
house.ReleaseSecure(house.Owner, this);
|
|
house.AddSecure(house.Owner, deed);
|
|
}
|
|
}
|
|
|
|
Delete();
|
|
}
|
|
}
|
|
} |