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

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();
}
}
}