Reorganizes Project (#41)

This commit is contained in:
Kamron Batman 2019-08-02 18:13:40 -07:00 committed by GitHub
parent 08bf44af9a
commit 3614a66aee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3499 changed files with 79 additions and 55 deletions

View file

@ -0,0 +1,113 @@
namespace Server.Items
{
public class EarringBoxSet : RedVelvetGiftBox
{
[Constructible]
public EarringBoxSet()
{
DropItem(new EarringsOfProtection(AosElementAttribute.Physical));
DropItem(new EarringsOfProtection(AosElementAttribute.Fire));
DropItem(new EarringsOfProtection(AosElementAttribute.Cold));
DropItem(new EarringsOfProtection(AosElementAttribute.Poison));
DropItem(new EarringsOfProtection(AosElementAttribute.Energy));
}
public EarringBoxSet(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class EarringsOfProtection : BaseJewel
{
private AosElementAttribute m_Attribute;
[Constructible]
public EarringsOfProtection() : this(RandomType())
{
}
[Constructible]
public EarringsOfProtection(AosElementAttribute element)
: base(0x1087, Layer.Earrings)
{
Resistances[element] = 2;
m_Attribute = element;
LootType = LootType.Blessed;
}
public EarringsOfProtection(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public virtual AosElementAttribute Attribute => m_Attribute;
public override int LabelNumber => GetItemData(m_Attribute, true);
public override int Hue => GetItemData(m_Attribute, false);
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write((int)m_Attribute);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Attribute = (AosElementAttribute)reader.ReadInt();
}
public static AosElementAttribute RandomType()
{
return GetTypes(Utility.Random(5));
}
public static AosElementAttribute GetTypes(int value)
{
switch (value)
{
case 0: return AosElementAttribute.Physical;
case 1: return AosElementAttribute.Fire;
case 2: return AosElementAttribute.Cold;
case 3: return AosElementAttribute.Poison;
default: return AosElementAttribute.Energy;
}
}
public static int GetItemData(AosElementAttribute element, bool label)
{
switch (element)
{
case AosElementAttribute.Physical: return label ? 1071091 : 0; // Earring of Protection (Physical) 1071091
case AosElementAttribute.Fire: return label ? 1071092 : 0x4ec; // Earring of Protection (Fire) 1071092
case AosElementAttribute.Cold: return label ? 1071093 : 0x4f2; // Earring of Protection (Cold) 1071093
case AosElementAttribute.Poison: return label ? 1071094 : 0x4f8; // Earring of Protection (Poison) 1071094
case AosElementAttribute.Energy: return label ? 1071095 : 0x4fe; // Earring of Protection (Energy) 1071095
default: return -1;
}
}
}
}

View file

@ -0,0 +1,319 @@
using System;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
public sealed class StopMusic : Packet
{
public static readonly Packet Instance = SetStatic(new StopMusic());
public StopMusic() : base(0x6D, 3)
{
m_Stream.Write((short)0x1FFF);
}
}
[Flippable(0x2AF9, 0x2AFD)]
public class DawnsMusicBox : Item, ISecurable
{
private static Dictionary<MusicName, DawnsMusicInfo> m_Info;
public static MusicName[] m_CommonTracks =
{
MusicName.Samlethe, MusicName.Sailing, MusicName.Britain2, MusicName.Britain1,
MusicName.Bucsden, MusicName.Forest_a, MusicName.Cove, MusicName.Death,
MusicName.Dungeon9, MusicName.Dungeon2, MusicName.Cave01, MusicName.Combat3,
MusicName.Combat1, MusicName.Combat2, MusicName.Jhelom, MusicName.Linelle,
MusicName.LBCastle, MusicName.Minoc, MusicName.Moonglow, MusicName.Magincia,
MusicName.Nujelm, MusicName.BTCastle, MusicName.Tavern04, MusicName.Skarabra,
MusicName.Stones2, MusicName.Serpents, MusicName.Taiko, MusicName.Tavern01,
MusicName.Tavern02, MusicName.Tavern03, MusicName.TokunoDungeon, MusicName.Trinsic,
MusicName.OldUlt01, MusicName.Ocllo, MusicName.Vesper, MusicName.Victory,
MusicName.Mountn_a, MusicName.Wind, MusicName.Yew, MusicName.Zento
};
public static MusicName[] m_UncommonTracks =
{
MusicName.GwennoConversation, MusicName.DreadHornArea, MusicName.ElfCity,
MusicName.GoodEndGame, MusicName.GoodVsEvil, MusicName.GreatEarthSerpents,
MusicName.GrizzleDungeon, MusicName.Humanoids_U9, MusicName.MelisandesLair,
MusicName.MinocNegative, MusicName.ParoxysmusLair, MusicName.Paws
};
public static MusicName[] m_RareTracks =
{
MusicName.SelimsBar, MusicName.SerpentIsleCombat_U7, MusicName.ValoriaShips
};
private int m_Count;
private int m_ItemID;
private Timer m_Timer;
[Constructible]
public DawnsMusicBox() : base(0x2AF9)
{
Weight = 1.0;
Tracks = new List<MusicName>();
while (Tracks.Count < 4)
{
MusicName name = RandomTrack(DawnsMusicRarity.Common);
if (!Tracks.Contains(name))
Tracks.Add(name);
}
}
public DawnsMusicBox(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1075198; // Dawn<77>s Music Box
public List<MusicName> Tracks{ get; private set; }
[CommandProperty(AccessLevel.GameMaster)]
public SecureLevel Level{ get; set; }
public override void OnAfterDuped(Item newItem)
{
if (!(newItem is DawnsMusicBox box))
return;
box.Tracks = new List<MusicName>();
box.Tracks.AddRange(Tracks);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
int commonSongs = 0;
int uncommonSongs = 0;
int rareSongs = 0;
for (int i = 0; i < Tracks.Count; i++)
{
DawnsMusicInfo info = GetInfo(Tracks[i]);
switch (info.Rarity)
{
case DawnsMusicRarity.Common:
commonSongs++;
break;
case DawnsMusicRarity.Uncommon:
uncommonSongs++;
break;
case DawnsMusicRarity.Rare:
rareSongs++;
break;
}
}
if (commonSongs > 0)
list.Add(1075234, commonSongs.ToString()); // ~1_NUMBER~ Common Tracks
if (uncommonSongs > 0)
list.Add(1075235, uncommonSongs.ToString()); // ~1_NUMBER~ Uncommon Tracks
if (rareSongs > 0)
list.Add(1075236, rareSongs.ToString()); // ~1_NUMBER~ Rare Tracks
}
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
SetSecureLevelEntry.AddTo(from, this, list); // Set secure level
}
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack) && !IsLockedDown)
{
from.SendLocalizedMessage(
1061856); // You must have the item in your backpack or locked down in order to use it.
}
else if (IsLockedDown && !HasAccces(from))
{
from.SendLocalizedMessage(502436); // That is not accessible.
}
else
{
from.CloseGump<DawnsMusicBoxGump>();
from.SendGump(new DawnsMusicBoxGump(this));
}
}
public bool HasAccces(Mobile m)
{
return m.AccessLevel >= AccessLevel.GameMaster || BaseHouse.FindHouseAt(this)?.HasAccess(m) == true;
}
public void PlayMusic(Mobile m, MusicName music)
{
if (m_Timer?.Running == true)
EndMusic(m);
else
m_ItemID = ItemID;
m.Send(new PlayMusic(music));
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 4, Animate);
}
public void EndMusic(Mobile m)
{
if (m_Timer?.Running == true)
m_Timer.Stop();
m.Send(StopMusic.Instance);
if (m_Count > 0)
ItemID = m_ItemID;
m_Count = 0;
}
private void Animate()
{
m_Count++;
if (m_Count >= 4)
{
m_Count = 0;
ItemID = m_ItemID;
}
else
{
ItemID++;
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
writer.Write(Tracks.Count);
for (int i = 0; i < Tracks.Count; i++)
writer.Write((int)Tracks[i]);
writer.Write((int)Level);
writer.Write(m_ItemID);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
int count = reader.ReadInt();
Tracks = new List<MusicName>();
for (int i = 0; i < count; i++)
Tracks.Add((MusicName)reader.ReadInt());
Level = (SecureLevel)reader.ReadInt();
m_ItemID = reader.ReadInt();
}
public static void Initialize()
{
m_Info = new Dictionary<MusicName, DawnsMusicInfo>
{
{ MusicName.Samlethe, new DawnsMusicInfo(1075152, DawnsMusicRarity.Common) },
{ MusicName.Sailing, new DawnsMusicInfo(1075163, DawnsMusicRarity.Common) },
{ MusicName.Britain2, new DawnsMusicInfo(1075145, DawnsMusicRarity.Common) },
{ MusicName.Britain1, new DawnsMusicInfo(1075144, DawnsMusicRarity.Common) },
{ MusicName.Bucsden, new DawnsMusicInfo(1075146, DawnsMusicRarity.Common) },
{ MusicName.Forest_a, new DawnsMusicInfo(1075161, DawnsMusicRarity.Common) },
{ MusicName.Cove, new DawnsMusicInfo(1075176, DawnsMusicRarity.Common) },
{ MusicName.Death, new DawnsMusicInfo(1075171, DawnsMusicRarity.Common) },
{ MusicName.Dungeon9, new DawnsMusicInfo(1075160, DawnsMusicRarity.Common) },
{ MusicName.Dungeon2, new DawnsMusicInfo(1075175, DawnsMusicRarity.Common) },
{ MusicName.Cave01, new DawnsMusicInfo(1075159, DawnsMusicRarity.Common) },
{ MusicName.Combat3, new DawnsMusicInfo(1075170, DawnsMusicRarity.Common) },
{ MusicName.Combat1, new DawnsMusicInfo(1075168, DawnsMusicRarity.Common) },
{ MusicName.Combat2, new DawnsMusicInfo(1075169, DawnsMusicRarity.Common) },
{ MusicName.Jhelom, new DawnsMusicInfo(1075147, DawnsMusicRarity.Common) },
{ MusicName.Linelle, new DawnsMusicInfo(1075185, DawnsMusicRarity.Common) },
{ MusicName.LBCastle, new DawnsMusicInfo(1075148, DawnsMusicRarity.Common) },
{ MusicName.Minoc, new DawnsMusicInfo(1075150, DawnsMusicRarity.Common) },
{ MusicName.Moonglow, new DawnsMusicInfo(1075177, DawnsMusicRarity.Common) },
{ MusicName.Magincia, new DawnsMusicInfo(1075149, DawnsMusicRarity.Common) },
{ MusicName.Nujelm, new DawnsMusicInfo(1075174, DawnsMusicRarity.Common) },
{ MusicName.BTCastle, new DawnsMusicInfo(1075173, DawnsMusicRarity.Common) },
{ MusicName.Tavern04, new DawnsMusicInfo(1075167, DawnsMusicRarity.Common) },
{ MusicName.Skarabra, new DawnsMusicInfo(1075154, DawnsMusicRarity.Common) },
{ MusicName.Stones2, new DawnsMusicInfo(1075143, DawnsMusicRarity.Common) },
{ MusicName.Serpents, new DawnsMusicInfo(1075153, DawnsMusicRarity.Common) },
{ MusicName.Taiko, new DawnsMusicInfo(1075180, DawnsMusicRarity.Common) },
{ MusicName.Tavern01, new DawnsMusicInfo(1075164, DawnsMusicRarity.Common) },
{ MusicName.Tavern02, new DawnsMusicInfo(1075165, DawnsMusicRarity.Common) },
{ MusicName.Tavern03, new DawnsMusicInfo(1075166, DawnsMusicRarity.Common) },
{ MusicName.TokunoDungeon, new DawnsMusicInfo(1075179, DawnsMusicRarity.Common) },
{ MusicName.Trinsic, new DawnsMusicInfo(1075155, DawnsMusicRarity.Common) },
{ MusicName.OldUlt01, new DawnsMusicInfo(1075142, DawnsMusicRarity.Common) },
{ MusicName.Ocllo, new DawnsMusicInfo(1075151, DawnsMusicRarity.Common) },
{ MusicName.Vesper, new DawnsMusicInfo(1075156, DawnsMusicRarity.Common) },
{ MusicName.Victory, new DawnsMusicInfo(1075172, DawnsMusicRarity.Common) },
{ MusicName.Mountn_a, new DawnsMusicInfo(1075162, DawnsMusicRarity.Common) },
{ MusicName.Wind, new DawnsMusicInfo(1075157, DawnsMusicRarity.Common) },
{ MusicName.Yew, new DawnsMusicInfo(1075158, DawnsMusicRarity.Common) },
{ MusicName.Zento, new DawnsMusicInfo(1075178, DawnsMusicRarity.Common) },
{ MusicName.GwennoConversation, new DawnsMusicInfo(1075131, DawnsMusicRarity.Uncommon) },
{ MusicName.DreadHornArea, new DawnsMusicInfo(1075181, DawnsMusicRarity.Uncommon) },
{ MusicName.ElfCity, new DawnsMusicInfo(1075182, DawnsMusicRarity.Uncommon) },
{ MusicName.GoodEndGame, new DawnsMusicInfo(1075132, DawnsMusicRarity.Uncommon) },
{ MusicName.GoodVsEvil, new DawnsMusicInfo(1075133, DawnsMusicRarity.Uncommon) },
{ MusicName.GreatEarthSerpents, new DawnsMusicInfo(1075134, DawnsMusicRarity.Uncommon) },
{ MusicName.GrizzleDungeon, new DawnsMusicInfo(1075186, DawnsMusicRarity.Uncommon) },
{ MusicName.Humanoids_U9, new DawnsMusicInfo(1075135, DawnsMusicRarity.Uncommon) },
{ MusicName.MelisandesLair, new DawnsMusicInfo(1075183, DawnsMusicRarity.Uncommon) },
{ MusicName.MinocNegative, new DawnsMusicInfo(1075136, DawnsMusicRarity.Uncommon) },
{ MusicName.ParoxysmusLair, new DawnsMusicInfo(1075184, DawnsMusicRarity.Uncommon) },
{ MusicName.Paws, new DawnsMusicInfo(1075137, DawnsMusicRarity.Uncommon) },
{ MusicName.SelimsBar, new DawnsMusicInfo(1075138, DawnsMusicRarity.Rare) },
{ MusicName.SerpentIsleCombat_U7, new DawnsMusicInfo(1075139, DawnsMusicRarity.Rare) },
{ MusicName.ValoriaShips, new DawnsMusicInfo(1075140, DawnsMusicRarity.Rare) }
};
}
public static DawnsMusicInfo GetInfo(MusicName name)
{
if (m_Info == null) // sanity
return null;
m_Info.TryGetValue(name, out DawnsMusicInfo info);
return info;
}
public static MusicName RandomTrack(DawnsMusicRarity rarity)
{
MusicName[] list;
switch (rarity)
{
default:
case DawnsMusicRarity.Common:
list = m_CommonTracks;
break;
case DawnsMusicRarity.Uncommon:
list = m_UncommonTracks;
break;
case DawnsMusicRarity.Rare:
list = m_RareTracks;
break;
}
return list[Utility.Random(list.Length)];
}
}
}

View file

@ -0,0 +1,138 @@
using Server.Targeting;
namespace Server.Items
{
[Flippable(0x1053, 0x1054)]
public class DawnsMusicGear : Item
{
[Constructible]
public DawnsMusicGear() : this(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common))
{
}
[Constructible]
public DawnsMusicGear(MusicName music) : base(0x1053)
{
Music = music;
Weight = 1.0;
}
public DawnsMusicGear(Serial serial) : base(serial)
{
}
public static DawnsMusicGear RandomCommon => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Common));
public static DawnsMusicGear RandomUncommon =>
new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Uncommon));
public static DawnsMusicGear RandomRare => new DawnsMusicGear(DawnsMusicBox.RandomTrack(DawnsMusicRarity.Rare));
[CommandProperty(AccessLevel.GameMaster)]
public MusicName Music{ get; set; }
public override void AddNameProperty(ObjectPropertyList list)
{
DawnsMusicInfo info = DawnsMusicBox.GetInfo(Music);
if (info != null)
{
if (info.Rarity == DawnsMusicRarity.Common)
list.Add(1075204); // Gear for Dawn's Music Box (Common)
else if (info.Rarity == DawnsMusicRarity.Uncommon)
list.Add(1075205); // Gear for Dawn's Music Box (Uncommon)
else if (info.Rarity == DawnsMusicRarity.Rare)
list.Add(1075206); // Gear for Dawn's Music Box (Rare)
list.Add(info.Name);
}
else
{
base.AddNameProperty(list);
}
}
public override void OnDoubleClick(Mobile from)
{
from.Target = new InternalTarget(this);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(1); // version
writer.Write((int)Music);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
switch (version)
{
case 1:
{
Music = (MusicName)reader.ReadInt();
break;
}
}
if (version == 0) // Music wasn't serialized in version 0, pick a new track of random rarity
{
DawnsMusicRarity rarity;
double rand = Utility.RandomDouble();
if (rand < 0.025)
rarity = DawnsMusicRarity.Rare;
else if (rand < 0.225)
rarity = DawnsMusicRarity.Uncommon;
else
rarity = DawnsMusicRarity.Common;
Music = DawnsMusicBox.RandomTrack(rarity);
}
}
public class InternalTarget : Target
{
private DawnsMusicGear m_Gear;
public InternalTarget(DawnsMusicGear gear) : base(2, false, TargetFlags.None)
{
m_Gear = gear;
}
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Gear?.Deleted != false)
return;
if (targeted is DawnsMusicBox box)
{
if (!box.Tracks.Contains(m_Gear.Music))
{
box.Tracks.Add(m_Gear.Music);
box.InvalidateProperties();
m_Gear.Delete();
from.SendLocalizedMessage(1071961); // This song has been added to the musicbox.
}
else
{
from.SendLocalizedMessage(1071962); // This song track is already in the musicbox.
}
}
else
{
from.SendLocalizedMessage(1071964); // Gears can only be put into a musicbox.
}
}
}
}
}

View file

@ -0,0 +1,22 @@
namespace Server.Items
{
public enum DawnsMusicRarity
{
Common,
Uncommon,
Rare
}
public class DawnsMusicInfo
{
public DawnsMusicInfo(int name, DawnsMusicRarity rarity)
{
Name = name;
Rarity = rarity;
}
public int Name{ get; }
public DawnsMusicRarity Rarity{ get; }
}
}

View file

@ -0,0 +1,50 @@
namespace Server.Items
{
public class DupresShield : BaseShield, ITokunoDyable
{
[Constructible]
public DupresShield() : base(0x2B01)
{
LootType = LootType.Blessed;
Weight = 6.0;
Attributes.BonusHits = 5;
Attributes.RegenHits = 1;
SkillBonuses.SetValues(0, SkillName.Parry, 5);
}
public DupresShield(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1075196; // Dupre<72>s Shield
public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override int AosStrReq => 50;
public override int ArmorBase => 15;
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();
}
}
}

View file

@ -0,0 +1,256 @@
using System;
namespace Server.Items
{
public class EnhancedBandage : Bandage
{
[Constructible]
public EnhancedBandage(int amount = 1)
: base(amount)
{
Hue = 0x8A5;
}
public EnhancedBandage(Serial serial)
: base(serial)
{
}
public static int HealingBonus => 10;
public override int LabelNumber => 1152441; // enhanced bandage
public override bool Dye(Mobile from, DyeTub sender)
{
return false;
}
public override void AddNameProperties(ObjectPropertyList list)
{
base.AddNameProperties(list);
list.Add(1075216); // these bandages have been enhanced
}
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();
}
}
[Flippable(0x2AC0, 0x2AC3)]
public class FountainOfLife : BaseAddonContainer
{
private int m_Charges;
private Timer m_Timer;
[Constructible]
public FountainOfLife(int charges = 10)
: base(0x2AC0)
{
m_Charges = charges;
m_Timer = Timer.DelayCall(RechargeTime, RechargeTime, Recharge);
}
public FountainOfLife(Serial serial)
: base(serial)
{
}
public override BaseAddonContainerDeed Deed => new FountainOfLifeDeed(m_Charges);
public virtual TimeSpan RechargeTime => TimeSpan.FromDays(1);
public override int LabelNumber => 1075197; // Fountain of Life
public override int DefaultGumpID => 0x484;
public override int DefaultDropSound => 66;
public override int DefaultMaxItems => 125;
[CommandProperty(AccessLevel.GameMaster)]
public int Charges
{
get => m_Charges;
set
{
m_Charges = Math.Min(value, 10);
InvalidateProperties();
}
}
public override bool OnDragLift(Mobile from)
{
return false;
}
public override bool OnDragDrop(Mobile from, Item dropped)
{
if (dropped is Bandage)
{
bool allow = base.OnDragDrop(from, dropped);
if (allow)
Enhance(from);
return allow;
}
from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
return false;
}
public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
{
if (item is Bandage)
{
bool allow = base.OnDragDropInto(from, item, p);
if (allow)
Enhance(from);
return allow;
}
from.SendLocalizedMessage(1075209); // Only bandages may be dropped into the fountain.
return false;
}
public override void AddNameProperties(ObjectPropertyList list)
{
base.AddNameProperties(list);
list.Add(1075217, m_Charges.ToString()); // ~1_val~ charges remaining
}
public override void OnDelete()
{
m_Timer?.Stop();
base.OnDelete();
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); //version
writer.Write(m_Charges);
writer.Write(m_Timer.Next);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
m_Charges = reader.ReadInt();
DateTime next = reader.ReadDateTime();
if (next < DateTime.UtcNow)
m_Timer = Timer.DelayCall(TimeSpan.Zero, RechargeTime, Recharge);
else
m_Timer = Timer.DelayCall(next - DateTime.UtcNow, RechargeTime, Recharge);
}
public void Recharge()
{
m_Charges = 10;
Enhance(null);
}
public void Enhance(Mobile from)
{
for (int i = Items.Count - 1; i >= 0 && m_Charges > 0; --i)
{
if (Items[i] is EnhancedBandage)
continue;
if (Items[i] is Bandage bandage)
{
Item enhanced;
if (bandage.Amount > m_Charges)
{
bandage.Amount -= m_Charges;
enhanced = new EnhancedBandage(m_Charges);
m_Charges = 0;
}
else
{
enhanced = new EnhancedBandage(bandage.Amount);
m_Charges -= bandage.Amount;
bandage.Delete();
}
if (from == null || !TryDropItem(from, enhanced, false)) // try stacking first
DropItem(enhanced);
}
}
InvalidateProperties();
}
}
public class FountainOfLifeDeed : BaseAddonContainerDeed
{
private int m_Charges;
[Constructible]
public FountainOfLifeDeed(int charges = 10)
{
LootType = LootType.Blessed;
m_Charges = charges;
}
public FountainOfLifeDeed(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1075197; // Fountain of Life
public override BaseAddonContainer Addon => new FountainOfLife(m_Charges);
[CommandProperty(AccessLevel.GameMaster)]
public int Charges
{
get => m_Charges;
set
{
m_Charges = Math.Min(value, 10);
InvalidateProperties();
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); //version
writer.Write(m_Charges);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
m_Charges = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,39 @@
namespace Server.Items
{
public class OssianGrimoire : NecromancerSpellbook, ITokunoDyable
{
[Constructible]
public OssianGrimoire()
{
LootType = LootType.Blessed;
SkillBonuses.SetValues(0, SkillName.Necromancy, 10.0);
Attributes.RegenMana = 1;
Attributes.CastSpeed = 1;
Attributes.IncreasedKarmaLoss = 5;
}
public OssianGrimoire(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078148; // Ossian Grimoire
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(1); //version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
if (version == 0)
Attributes.IncreasedKarmaLoss = 5;
}
}
}

View file

@ -0,0 +1,43 @@
namespace Server.Items
{
public class QuiverOfInfinity : BaseQuiver, ITokunoDyable
{
[Constructible]
public QuiverOfInfinity() : base(0x2B02)
{
LootType = LootType.Blessed;
Weight = 8.0;
WeightReduction = 30;
LowerAmmoCost = 20;
Attributes.DefendChance = 5;
}
public QuiverOfInfinity(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1075201; // Quiver of Infinity
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(2); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
if (version < 1 && DamageIncrease == 0)
DamageIncrease = 10;
if (version < 2 && Attributes.WeaponDamage == 10)
Attributes.WeaponDamage = 0;
}
}
}

View file

@ -0,0 +1,182 @@
using System;
using Server.Mobiles;
using Server.Spells.Ninjitsu;
namespace Server.Items
{
public enum TalismanForm
{
Ferret = 1031672,
Squirrel = 1031671,
CuSidhe = 1031670,
Reptalon = 1075202
}
public class BaseFormTalisman : Item, ITokunoDyable
{
public BaseFormTalisman() : base(0x2F59)
{
LootType = LootType.Blessed;
Layer = Layer.Talisman;
Weight = 1.0;
}
public BaseFormTalisman(Serial serial) : base(serial)
{
}
public virtual TalismanForm Form => TalismanForm.Squirrel;
public override void AddNameProperty(ObjectPropertyList list)
{
list.Add(1075200, $"#{(int)Form}");
}
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 override void OnRemoved(IEntity parent)
{
base.OnRemoved(parent);
if (parent is Mobile m) AnimalForm.RemoveContext(m, true);
}
public static bool EntryEnabled(Mobile m, Type type)
{
if (type == typeof(Squirrel))
return m.Talisman is SquirrelFormTalisman;
if (type == typeof(Ferret))
return m.Talisman is FerretFormTalisman;
if (type == typeof(CuSidhe))
return m.Talisman is CuSidheFormTalisman;
if (type == typeof(Reptalon))
return m.Talisman is ReptalonFormTalisman;
return true;
}
}
public class FerretFormTalisman : BaseFormTalisman
{
[Constructible]
public FerretFormTalisman()
{
}
public FerretFormTalisman(Serial serial) : base(serial)
{
}
public override TalismanForm Form => TalismanForm.Ferret;
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 SquirrelFormTalisman : BaseFormTalisman
{
[Constructible]
public SquirrelFormTalisman()
{
}
public SquirrelFormTalisman(Serial serial) : base(serial)
{
}
public override TalismanForm Form => TalismanForm.Squirrel;
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 CuSidheFormTalisman : BaseFormTalisman
{
[Constructible]
public CuSidheFormTalisman()
{
}
public CuSidheFormTalisman(Serial serial) : base(serial)
{
}
public override TalismanForm Form => TalismanForm.CuSidhe;
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 ReptalonFormTalisman : BaseFormTalisman
{
[Constructible]
public ReptalonFormTalisman()
{
}
public ReptalonFormTalisman(Serial serial) : base(serial)
{
}
public override TalismanForm Form => TalismanForm.Reptalon;
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();
}
}
}

View file

@ -0,0 +1,37 @@
namespace Server.Items
{
[Flippable(0x2684, 0x2683)]
public class HoodedShroudOfShadows : BaseOuterTorso
{
[Constructible]
public HoodedShroudOfShadows(int hue = 0x455) : base(0x2684, hue)
{
LootType = LootType.Blessed;
Weight = 3.0;
}
public HoodedShroudOfShadows(Serial serial) : base(serial)
{
}
public override bool Dye(Mobile from, DyeTub sender)
{
from.SendLocalizedMessage(sender.FailMessage);
return false;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,34 @@
namespace Server.Items
{
public class LuckyNecklace : BaseJewel
{
[Constructible]
public LuckyNecklace()
: base(0x1088, Layer.Neck)
{
Attributes.Luck = 200;
LootType = LootType.Blessed;
}
public LuckyNecklace(Serial serial) : base(serial)
{
}
public override int Hue => 1150;
public override int LabelNumber => 1075239; //Lucky Necklace 1075239
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt(); /* int version = reader.ReadInt(); Why? Just to have an unused var? */
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0xC12, 0xC13)]
public class BrokenArmoireComponent : AddonComponent
{
public BrokenArmoireComponent() : base(0xC12)
{
}
public BrokenArmoireComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076262; // Broken Armoire
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 BrokenArmoireAddon : BaseAddon
{
[Constructible]
public BrokenArmoireAddon()
{
AddComponent(new BrokenArmoireComponent(), 0, 0, 0);
}
public BrokenArmoireAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenArmoireDeed();
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 BrokenArmoireDeed : BaseAddonDeed
{
[Constructible]
public BrokenArmoireDeed()
{
LootType = LootType.Blessed;
}
public BrokenArmoireDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenArmoireAddon();
public override int LabelNumber => 1076262; // Broken Armoire
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();
}
}
}

View file

@ -0,0 +1,134 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class BrokenBedAddon : BaseAddon
{
[Constructible]
public BrokenBedAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0x1895, 1076263), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1894, 1076263), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0x1897, 1076263), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1896, 1076263), 1, 1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0x1899, 1076263), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1898, 1076263), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0x189B, 1076263), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0x189A, 1076263), 1, 1, 0);
}
}
public BrokenBedAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenBedDeed();
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 BrokenBedDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public BrokenBedDeed()
{
LootType = LootType.Blessed;
}
public BrokenBedDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenBedAddon(m_East);
public override int LabelNumber => 1076263; // Broken Bed
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private BrokenBedDeed m_Deed;
public InternalGump(BrokenBedDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076749, 0x7FFF); // Please select your broken bed position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0xC14, 0xC15)]
public class BrokenBookcaseComponent : AddonComponent
{
public BrokenBookcaseComponent() : base(0xC14)
{
}
public BrokenBookcaseComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076258; // Broken Bookcase
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 BrokenBookcaseAddon : BaseAddon
{
[Constructible]
public BrokenBookcaseAddon()
{
AddComponent(new BrokenBookcaseComponent(), 0, 0, 0);
}
public BrokenBookcaseAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenBookcaseDeed();
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 BrokenBookcaseDeed : BaseAddonDeed
{
[Constructible]
public BrokenBookcaseDeed()
{
LootType = LootType.Blessed;
}
public BrokenBookcaseDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenBookcaseAddon();
public override int LabelNumber => 1076258; // Broken Bookcase
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0xC24, 0xC25)]
public class BrokenChestOfDrawersComponent : AddonComponent
{
public BrokenChestOfDrawersComponent() : base(0xC24)
{
}
public BrokenChestOfDrawersComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076261; // Broken Chest of Drawers
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 BrokenChestOfDrawersAddon : BaseAddon
{
[Constructible]
public BrokenChestOfDrawersAddon()
{
AddComponent(new BrokenChestOfDrawersComponent(), 0, 0, 0);
}
public BrokenChestOfDrawersAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenChestOfDrawersDeed();
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 BrokenChestOfDrawersDeed : BaseAddonDeed
{
[Constructible]
public BrokenChestOfDrawersDeed()
{
LootType = LootType.Blessed;
}
public BrokenChestOfDrawersDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenChestOfDrawersAddon();
public override int LabelNumber => 1076261; // Broken Chest of Drawers
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0xC17, 0xC18)]
public class BrokenCoveredChairComponent : AddonComponent
{
public BrokenCoveredChairComponent() : base(0xC17)
{
}
public BrokenCoveredChairComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076257; // Broken Covered Chair
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 BrokenCoveredChairAddon : BaseAddon
{
[Constructible]
public BrokenCoveredChairAddon()
{
AddComponent(new BrokenCoveredChairComponent(), 0, 0, 0);
}
public BrokenCoveredChairAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenCoveredChairDeed();
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 BrokenCoveredChairDeed : BaseAddonDeed
{
[Constructible]
public BrokenCoveredChairDeed()
{
LootType = LootType.Blessed;
}
public BrokenCoveredChairDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenCoveredChairAddon();
public override int LabelNumber => 1076257; // Broken Covered Chair
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();
}
}
}

View file

@ -0,0 +1,92 @@
namespace Server.Items
{
[Flippable(0xC19, 0xC1A)]
public class BrokenFallenChairComponent : AddonComponent
{
public BrokenFallenChairComponent() : base(0xC19)
{
}
public BrokenFallenChairComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076264; // Broken Fallen Chair
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(1); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
if (version < 1 && ItemID == 0xC17)
ItemID = 0xC19;
}
}
public class BrokenFallenChairAddon : BaseAddon
{
[Constructible]
public BrokenFallenChairAddon()
{
AddComponent(new BrokenFallenChairComponent(), 0, 0, 0);
}
public BrokenFallenChairAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenFallenChairDeed();
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 BrokenFallenChairDeed : BaseAddonDeed
{
[Constructible]
public BrokenFallenChairDeed()
{
LootType = LootType.Blessed;
}
public BrokenFallenChairDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenFallenChairAddon();
public override int LabelNumber => 1076264; // Broken Fallen Chair
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();
}
}
}

View file

@ -0,0 +1,130 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class BrokenVanityAddon : BaseAddon
{
[Constructible]
public BrokenVanityAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0xC20, 1076260), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0xC21, 1076260), 0, -1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0xC22, 1076260), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0xC23, 1076260), -1, 0, 0);
}
}
public BrokenVanityAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BrokenVanityDeed();
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 BrokenVanityDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public BrokenVanityDeed()
{
LootType = LootType.Blessed;
}
public BrokenVanityDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BrokenVanityAddon(m_East);
public override int LabelNumber => 1076260; // Broken Vanity
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private BrokenVanityDeed m_Deed;
public InternalGump(BrokenVanityDeed deed) : base(60, 63)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076747, 0x7FFF); // Please select your broken vanity position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0xC1B, 0xC1C, 0xC1E, 0xC1D)]
public class StandingBrokenChairComponent : AddonComponent
{
public StandingBrokenChairComponent() : base(0xC1B)
{
}
public StandingBrokenChairComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076259; // Standing Broken Chair
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 StandingBrokenChairAddon : BaseAddon
{
[Constructible]
public StandingBrokenChairAddon()
{
AddComponent(new StandingBrokenChairComponent(), 0, 0, 0);
}
public StandingBrokenChairAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new StandingBrokenChairDeed();
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 StandingBrokenChairDeed : BaseAddonDeed
{
[Constructible]
public StandingBrokenChairDeed()
{
LootType = LootType.Blessed;
}
public StandingBrokenChairDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new StandingBrokenChairAddon();
public override int LabelNumber => 1076259; // Standing Broken Chair
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();
}
}
}

View file

@ -0,0 +1,120 @@
using Server.Engines.Craft;
namespace Server.Items
{
[Flippable(0x13E4, 0x13E3)]
public class AncientSmithyHammer : BaseTool
{
private int m_Bonus;
private SkillMod m_SkillMod;
[Constructible]
public AncientSmithyHammer(int bonus, int uses = 600) : base(uses, 0x13E4)
{
m_Bonus = bonus;
Weight = 8.0;
Layer = Layer.OneHanded;
Hue = 0x482;
}
public AncientSmithyHammer(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int Bonus
{
get => m_Bonus;
set
{
m_Bonus = value;
InvalidateProperties();
if (m_Bonus == 0)
{
m_SkillMod?.Remove();
m_SkillMod = null;
}
else if (m_SkillMod == null && Parent is Mobile mobile)
{
m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
else if (m_SkillMod != null)
{
m_SkillMod.Value = m_Bonus;
}
}
}
public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem;
public override int LabelNumber => 1045127; // ancient smithy hammer
public override void OnAdded(IEntity parent)
{
base.OnAdded(parent);
if (m_Bonus != 0 && parent is Mobile mobile)
{
m_SkillMod?.Remove();
m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
}
public override void OnRemoved(IEntity parent)
{
base.OnRemoved(parent);
m_SkillMod?.Remove();
m_SkillMod = null;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Bonus != 0)
list.Add(1060451, "#1042354\t{0}", m_Bonus.ToString()); // ~1_skillname~ +~2_val~
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Bonus);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Bonus = reader.ReadInt();
break;
}
}
if (m_Bonus != 0 && Parent is Mobile mobile)
{
m_SkillMod?.Remove();
m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
if (Hue == 0)
Hue = 0x482;
}
}
}

View file

@ -0,0 +1,38 @@
using Server.Engines.Craft;
namespace Server.Items
{
[Anvil]
[Flippable(0xFAF, 0xFB0)]
public class ColoredAnvil : Item
{
[Constructible]
public ColoredAnvil() : this(CraftResources.GetHue(
(CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite)))
{
}
[Constructible]
public ColoredAnvil(int hue) : base(0xFAF)
{
Hue = hue;
Weight = 20;
}
public ColoredAnvil(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,248 @@
namespace Server.Items
{
[Flippable(0x13c6, 0x13ce)]
public class LeatherGlovesOfMining : BaseGlovesOfMining
{
[Constructible]
public LeatherGlovesOfMining(int bonus) : base(bonus, 0x13C6)
{
Weight = 1;
}
public LeatherGlovesOfMining(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 2;
public override int BaseFireResistance => 4;
public override int BaseColdResistance => 3;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 3;
public override int InitMinHits => 30;
public override int InitMaxHits => 40;
public override int AosStrReq => 20;
public override int OldStrReq => 10;
public override int ArmorBase => 13;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Leather;
public override CraftResource DefaultResource => CraftResource.RegularLeather;
public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All;
public override int LabelNumber => 1045122; // leather blacksmith gloves of mining
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x13d5, 0x13dd)]
public class StuddedGlovesOfMining : BaseGlovesOfMining
{
[Constructible]
public StuddedGlovesOfMining(int bonus) : base(bonus, 0x13D5)
{
Weight = 2;
}
public StuddedGlovesOfMining(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 2;
public override int BaseFireResistance => 4;
public override int BaseColdResistance => 3;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 4;
public override int InitMinHits => 35;
public override int InitMaxHits => 45;
public override int AosStrReq => 25;
public override int OldStrReq => 25;
public override int ArmorBase => 16;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Studded;
public override CraftResource DefaultResource => CraftResource.RegularLeather;
public override int LabelNumber => 1045123; // studded leather blacksmith gloves of mining
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x13eb, 0x13f2)]
public class RingmailGlovesOfMining : BaseGlovesOfMining
{
[Constructible]
public RingmailGlovesOfMining(int bonus) : base(bonus, 0x13EB)
{
Weight = 1;
}
public RingmailGlovesOfMining(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 3;
public override int BaseFireResistance => 3;
public override int BaseColdResistance => 1;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 3;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 40;
public override int OldStrReq => 20;
public override int OldDexBonus => -1;
public override int ArmorBase => 22;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Ringmail;
public override int LabelNumber => 1045124; // ringmail blacksmith gloves of mining
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public abstract class BaseGlovesOfMining : BaseArmor
{
private int m_Bonus;
private SkillMod m_SkillMod;
public BaseGlovesOfMining(int bonus, int itemID) : base(itemID)
{
m_Bonus = bonus;
Hue = CraftResources.GetHue(
(CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite));
}
public BaseGlovesOfMining(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int Bonus
{
get => m_Bonus;
set
{
m_Bonus = value;
InvalidateProperties();
if (m_Bonus == 0)
{
m_SkillMod?.Remove();
m_SkillMod = null;
}
else if (m_SkillMod == null && Parent is Mobile mobile)
{
m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
else if (m_SkillMod != null)
{
m_SkillMod.Value = m_Bonus;
}
}
}
public override void OnAdded(IEntity parent)
{
base.OnAdded(parent);
if (m_Bonus != 0 && parent is Mobile mobile)
{
m_SkillMod?.Remove();
m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
}
public override void OnRemoved(IEntity parent)
{
base.OnRemoved(parent);
m_SkillMod?.Remove();
m_SkillMod = null;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Bonus != 0)
list.Add(1062005, m_Bonus.ToString()); // mining bonus +~1_val~
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Bonus);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Bonus = reader.ReadInt();
break;
}
}
if (m_Bonus != 0 && Parent is Mobile mobile)
{
m_SkillMod?.Remove();
m_SkillMod = new DefaultSkillMod(SkillName.Mining, true, m_Bonus);
mobile.AddSkillMod(m_SkillMod);
}
}
}
}

View file

@ -0,0 +1,187 @@
using Server.Network;
using Server.Targeting;
namespace Server.Items
{
public class PowderOfTemperament : Item, IUsesRemaining
{
private int m_UsesRemaining;
[Constructible]
public PowderOfTemperament(int charges = 10) : base(4102)
{
Weight = 1.0;
Hue = 2419;
UsesRemaining = charges;
}
public PowderOfTemperament(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1049082; // powder of fortifying
[CommandProperty(AccessLevel.GameMaster)]
public int UsesRemaining
{
get => m_UsesRemaining;
set
{
m_UsesRemaining = value;
InvalidateProperties();
}
}
bool IUsesRemaining.ShowUsesRemaining
{
get => true;
set { }
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(m_UsesRemaining);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_UsesRemaining = reader.ReadInt();
break;
}
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~
}
public virtual void DisplayDurabilityTo(Mobile m)
{
LabelToAffix(m, 1017323, AffixType.Append, ": " + m_UsesRemaining); // Durability
}
public override void OnSingleClick(Mobile from)
{
DisplayDurabilityTo(from);
base.OnSingleClick(from);
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
from.Target = new InternalTarget(this);
else
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
private class InternalTarget : Target
{
private PowderOfTemperament m_Powder;
public InternalTarget(PowderOfTemperament powder) : base(2, false, TargetFlags.None)
{
m_Powder = powder;
}
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Powder?.Deleted != false || m_Powder.UsesRemaining <= 0)
{
from.SendLocalizedMessage(1049086); // You have used up your powder of temperament.
return;
}
if (targeted is Item item && item is IDurability wearable)
{
if (!wearable.CanFortify)
{
from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
return;
}
if ((item.IsChildOf(from.Backpack) || Core.ML && item.Parent == from) &&
m_Powder.IsChildOf(from.Backpack))
{
int origMaxHP = wearable.MaxHitPoints;
int origCurHP = wearable.HitPoints;
if (origMaxHP > 0)
{
int initMaxHP = Core.AOS ? 255 : wearable.InitMaxHits;
wearable.UnscaleDurability();
if (wearable.MaxHitPoints < initMaxHP)
{
int bonus = initMaxHP - wearable.MaxHitPoints;
if (bonus > 10)
bonus = 10;
wearable.MaxHitPoints += bonus;
wearable.HitPoints += bonus;
wearable.ScaleDurability();
if (wearable.MaxHitPoints > 255) wearable.MaxHitPoints = 255;
if (wearable.HitPoints > 255) wearable.HitPoints = 255;
if (wearable.MaxHitPoints > origMaxHP)
{
from.SendLocalizedMessage(1049084); // You successfully use the powder on the item.
from.PlaySound(0x247);
--m_Powder.UsesRemaining;
if (m_Powder.UsesRemaining <= 0)
{
from.SendLocalizedMessage(1049086); // You have used up your powder of fortifying.
m_Powder.Delete();
}
}
else
{
wearable.MaxHitPoints = origMaxHP;
wearable.HitPoints = origCurHP;
from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
}
}
else
{
from.SendLocalizedMessage(1049085); // The item cannot be improved any further.
wearable.ScaleDurability();
}
}
else
{
from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
}
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
else
{
from.SendLocalizedMessage(1049083); // You cannot use the powder on that item.
}
}
}
}
}

View file

@ -0,0 +1,46 @@
namespace Server.Items
{
public class JesterHatofChuckles : BaseHat, ITokunoDyable
{
[Constructible]
public JesterHatofChuckles() : this(Utility.RandomList(0x13e, 0x03, 0x172, 0x3f))
{
}
[Constructible]
public JesterHatofChuckles(int hue) : base(0x171C, hue)
{
Attributes.Luck = 150;
Weight = 1.0;
}
public JesterHatofChuckles(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073256; //Jester Hat of Chuckles - Museum of Vesper Replica 1073256
public override int BasePhysicalResistance => 12;
public override int BaseFireResistance => 12;
public override int BaseColdResistance => 12;
public override int BasePoisonResistance => 12;
public override int BaseEnergyResistance => 12;
public override int InitMinHits => 100;
public override int InitMaxHits => 100;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,184 @@
using System;
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A5D, 0x2A61)]
public class AwesomeDisturbingPortraitComponent : AddonComponent
{
private InternalTimer m_Timer;
public AwesomeDisturbingPortraitComponent() : base(0x2A5D)
{
m_Timer = new InternalTimer(this, TimeSpan.FromSeconds(1));
m_Timer.Start();
}
public AwesomeDisturbingPortraitComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074479; // Disturbing portrait
public bool FacingSouth => ItemID < 0x2A61;
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
{
Clock.GetTime(Map, X, Y, out int hours, out int _);
if (hours < 4 || hours > 20)
Effects.PlaySound(Location, Map, 0x569);
UpdateImage();
}
else
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if (m_Timer?.Running == true)
m_Timer.Stop();
}
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();
m_Timer = new InternalTimer(this, TimeSpan.Zero);
m_Timer.Start();
}
private void UpdateImage()
{
Clock.GetTime(Map, X, Y, out int hours, out int _);
if (FacingSouth)
{
if (hours < 4)
ItemID = 0x2A60;
else if (hours < 6)
ItemID = 0x2A5F;
else if (hours < 8)
ItemID = 0x2A5E;
else if (hours < 16)
ItemID = 0x2A5D;
else if (hours < 18)
ItemID = 0x2A5E;
else if (hours < 20)
ItemID = 0x2A5F;
else
ItemID = 0x2A60;
}
else
{
if (hours < 4)
ItemID = 0x2A64;
else if (hours < 6)
ItemID = 0x2A63;
else if (hours < 8)
ItemID = 0x2A62;
else if (hours < 16)
ItemID = 0x2A61;
else if (hours < 18)
ItemID = 0x2A62;
else if (hours < 20)
ItemID = 0x2A63;
else
ItemID = 0x2A64;
}
}
private class InternalTimer : Timer
{
private AwesomeDisturbingPortraitComponent m_Component;
public InternalTimer(AwesomeDisturbingPortraitComponent c, TimeSpan delay) : base(delay,
TimeSpan.FromMinutes(10))
{
m_Component = c;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
if (m_Component?.Deleted == false)
m_Component.UpdateImage();
}
}
}
public class AwesomeDisturbingPortraitAddon : BaseAddon
{
[Constructible]
public AwesomeDisturbingPortraitAddon()
{
AddComponent(new AwesomeDisturbingPortraitComponent(), 0, 0, 0);
}
public AwesomeDisturbingPortraitAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new AwesomeDisturbingPortraitDeed();
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 AwesomeDisturbingPortraitDeed : BaseAddonDeed
{
[Constructible]
public AwesomeDisturbingPortraitDeed()
{
LootType = LootType.Blessed;
}
public AwesomeDisturbingPortraitDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new AwesomeDisturbingPortraitAddon();
public override int LabelNumber => 1074479; // Disturbing portrait
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();
}
}
}

View file

@ -0,0 +1,189 @@
using System;
namespace Server.Items
{
public class BedOfNailsComponent : AddonComponent
{
public BedOfNailsComponent(int itemID)
: base(itemID)
{
}
public BedOfNailsComponent(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1074801; // Bed of Nails
public override bool OnMoveOver(Mobile m)
{
bool allow = base.OnMoveOver(m);
if (allow && Addon is BedOfNailsAddon addon)
addon.OnMoveOver(m);
return allow;
}
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();
}
}
[FlippableAddon(Direction.South, Direction.East)]
public class BedOfNailsAddon : BaseAddon
{
private InternalTimer m_Timer;
[Constructible]
public BedOfNailsAddon()
{
Direction = Direction.South;
AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
}
public BedOfNailsAddon(Serial serial)
: base(serial)
{
}
public override BaseAddonDeed Deed => new BedOfNailsDeed();
public override bool OnMoveOver(Mobile m)
{
if (m.Alive && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
{
if (m.Player)
{
if (m.Female)
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53B, 0x53D));
else
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x53E, 0x540));
}
if (m_Timer == null || !m_Timer.Running)
(m_Timer = new InternalTimer(m)).Start();
}
return true;
}
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 virtual void Flip(Mobile from, Direction direction)
{
switch (direction)
{
case Direction.East:
AddComponent(new BedOfNailsComponent(0x2A89), 0, 0, 0);
AddComponent(new BedOfNailsComponent(0x2A8A), -1, 0, 0);
break;
case Direction.South:
AddComponent(new BedOfNailsComponent(0x2A81), 0, 0, 0);
AddComponent(new BedOfNailsComponent(0x2A82), 0, -1, 0);
break;
}
}
private class InternalTimer : Timer
{
private Point3D m_Location;
private Mobile m_Mobile;
public InternalTimer(Mobile m)
: base(TimeSpan.Zero, TimeSpan.FromSeconds(1), 5)
{
m_Mobile = m;
m_Location = Point3D.Zero;
}
protected override void OnTick()
{
if (m_Mobile?.Map == null || m_Mobile.Deleted || !m_Mobile.Alive || m_Mobile.Map == Map.Internal)
{
Stop();
}
else if (m_Location != m_Mobile.Location)
{
int amount = Utility.RandomMinMax(0, 7);
for (int i = 0; i < amount; i++)
{
int x = m_Mobile.X + Utility.RandomMinMax(-1, 1);
int y = m_Mobile.Y + Utility.RandomMinMax(-1, 1);
int z = m_Mobile.Z;
if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
{
z = m_Mobile.Map.GetAverageZ(x, y);
if (!m_Mobile.Map.CanFit(x, y, z, 1, false, false))
continue;
}
Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
blood.MoveToWorld(new Point3D(x, y, z), m_Mobile.Map);
}
m_Location = m_Mobile.Location;
}
}
}
}
public class BedOfNailsDeed : BaseAddonDeed
{
[Constructible]
public BedOfNailsDeed()
{
LootType = LootType.Blessed;
}
public BedOfNailsDeed(Serial serial)
: base(serial)
{
}
public override BaseAddon Addon => new BedOfNailsAddon();
public override int LabelNumber => 1074801; // Bed of Nails
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();
}
}
}

View file

@ -0,0 +1,117 @@
namespace Server.Items
{
public class BoneCouchComponent : AddonComponent
{
public BoneCouchComponent(int itemID) : base(itemID)
{
}
public BoneCouchComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074477; // Bone couch
public override bool OnMoveOver(Mobile m)
{
bool allow = base.OnMoveOver(m);
if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x547, 0x54A));
return allow;
}
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();
}
}
[FlippableAddon(Direction.South, Direction.East)]
public class BoneCouchAddon : BaseAddon
{
[Constructible]
public BoneCouchAddon()
{
Direction = Direction.South;
AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
}
public BoneCouchAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BoneCouchDeed();
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 virtual void Flip(Mobile from, Direction direction)
{
switch (direction)
{
case Direction.East:
AddComponent(new BoneCouchComponent(0x2A80), 0, 0, 0);
AddComponent(new BoneCouchComponent(0x2A7F), 0, 1, 0);
break;
case Direction.South:
AddComponent(new BoneCouchComponent(0x2A5A), 0, 0, 0);
AddComponent(new BoneCouchComponent(0x2A5B), -1, 0, 0);
break;
}
}
}
public class BoneCouchDeed : BaseAddonDeed
{
[Constructible]
public BoneCouchDeed()
{
LootType = LootType.Blessed;
}
public BoneCouchDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BoneCouchAddon();
public override int LabelNumber => 1074477; // Bone couch
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class BoneTableAddon : BaseAddon
{
[Constructible]
public BoneTableAddon()
{
AddComponent(new LocalizedAddonComponent(0x2A5C, 1074478), 0, 0, 0);
}
public BoneTableAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BoneTableDeed();
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 BoneTableDeed : BaseAddonDeed
{
[Constructible]
public BoneTableDeed()
{
LootType = LootType.Blessed;
}
public BoneTableDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BoneTableAddon();
public override int LabelNumber => 1074478; // Bone table
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();
}
}
}

View file

@ -0,0 +1,99 @@
namespace Server.Items
{
[Flippable(0x2A58, 0x2A59)]
public class BoneThroneComponent : AddonComponent
{
public BoneThroneComponent() : base(0x2A58)
{
}
public BoneThroneComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074476; // Bone throne
public override bool OnMoveOver(Mobile m)
{
bool allow = base.OnMoveOver(m);
if (allow && m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x54B, 0x54D));
return allow;
}
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 BoneThroneAddon : BaseAddon
{
[Constructible]
public BoneThroneAddon()
{
AddComponent(new BoneThroneComponent(), 0, 0, 0);
}
public BoneThroneAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BoneThroneDeed();
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 BoneThroneDeed : BaseAddonDeed
{
[Constructible]
public BoneThroneDeed()
{
LootType = LootType.Blessed;
}
public BoneThroneDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BoneThroneAddon();
public override int LabelNumber => 1074476; // Bone throne
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();
}
}
}

View file

@ -0,0 +1,137 @@
using System;
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A69, 0x2A6D)]
public class CreepyPortraitComponent : AddonComponent
{
public CreepyPortraitComponent() : base(0x2A69)
{
}
public CreepyPortraitComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074481; // Creepy portrait
public override bool HandlesOnMovement => true;
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x565, 0x566));
else
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
public override void OnMovement(Mobile m, Point3D old)
{
if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
{
if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
{
if (ItemID == 0x2A69 || ItemID == 0x2A6D)
{
Up();
Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Up);
}
}
else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
{
if (ItemID == 0x2A6C || ItemID == 0x2A70)
{
Down();
Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Down);
}
}
}
}
private void Up()
{
ItemID += 1;
}
private void Down()
{
ItemID -= 1;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(1); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
if (version == 0 && ItemID != 0x2A69 && ItemID != 0x2A6D)
ItemID = 0x2A69;
}
}
public class CreepyPortraitAddon : BaseAddon
{
[Constructible]
public CreepyPortraitAddon()
{
AddComponent(new CreepyPortraitComponent(), 0, 0, 0);
}
public CreepyPortraitAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new CreepyPortraitDeed();
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 CreepyPortraitDeed : BaseAddonDeed
{
[Constructible]
public CreepyPortraitDeed()
{
LootType = LootType.Blessed;
}
public CreepyPortraitDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new CreepyPortraitAddon();
public override int LabelNumber => 1074481; // Creepy portrait
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();
}
}
}

View file

@ -0,0 +1,121 @@
using System;
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A5D, 0x2A61)]
public class DisturbingPortraitComponent : AddonComponent
{
private Timer m_Timer;
public DisturbingPortraitComponent() : base(0x2A5D)
{
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
}
public DisturbingPortraitComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074479; // Disturbing portrait
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
else
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if (m_Timer?.Running == true)
m_Timer.Stop();
}
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();
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), Change);
}
private void Change()
{
if (ItemID < 0x2A61)
ItemID = Utility.RandomMinMax(0x2A5D, 0x2A60);
else
ItemID = Utility.RandomMinMax(0x2A61, 0x2A64);
}
}
public class DisturbingPortraitAddon : BaseAddon
{
[Constructible]
public DisturbingPortraitAddon()
{
AddComponent(new DisturbingPortraitComponent(), 0, 0, 0);
}
public DisturbingPortraitAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new DisturbingPortraitDeed();
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 DisturbingPortraitDeed : BaseAddonDeed
{
[Constructible]
public DisturbingPortraitDeed()
{
LootType = LootType.Blessed;
}
public DisturbingPortraitDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new DisturbingPortraitAddon();
public override int LabelNumber => 1074479; // Disturbing portrait
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();
}
}
}

View file

@ -0,0 +1,112 @@
namespace Server.Items
{
[Flippable(0x2A7B, 0x2A7D)]
public class HaunterMirrorComponent : AddonComponent
{
public HaunterMirrorComponent() : base(0x2A7B)
{
}
public HaunterMirrorComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074800; // Haunted Mirror
public override bool HandlesOnMovement => true;
public override void OnMovement(Mobile m, Point3D old)
{
base.OnMovement(m, old);
if (m.Alive && m.Player && (m.AccessLevel == AccessLevel.Player || !m.Hidden))
{
if (!Utility.InRange(old, Location, 2) && Utility.InRange(m.Location, Location, 2))
{
if (ItemID == 0x2A7B || ItemID == 0x2A7D)
{
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x551, 0x553));
ItemID += 1;
}
}
else if (Utility.InRange(old, Location, 2) && !Utility.InRange(m.Location, Location, 2))
{
if (ItemID == 0x2A7C || ItemID == 0x2A7E)
ItemID -= 1;
}
}
}
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 HaunterMirrorAddon : BaseAddon
{
[Constructible]
public HaunterMirrorAddon()
{
AddComponent(new HaunterMirrorComponent(), 0, 0, 0);
}
public HaunterMirrorAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new HaunterMirrorDeed();
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 HaunterMirrorDeed : BaseAddonDeed
{
[Constructible]
public HaunterMirrorDeed()
{
LootType = LootType.Blessed;
}
public HaunterMirrorDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new HaunterMirrorAddon();
public override int LabelNumber => 1074800; // Haunted Mirror
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();
}
}
}

View file

@ -0,0 +1,98 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A75, 0x2A76)]
public class MountedPixieBlueComponent : AddonComponent
{
public MountedPixieBlueComponent() : base(0x2A75)
{
}
public MountedPixieBlueComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074482; // Mounted pixie
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55C, 0x55E));
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 class MountedPixieBlueAddon : BaseAddon
{
public MountedPixieBlueAddon()
{
AddComponent(new MountedPixieBlueComponent(), 0, 0, 0);
}
public MountedPixieBlueAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new MountedPixieBlueDeed();
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 MountedPixieBlueDeed : BaseAddonDeed
{
[Constructible]
public MountedPixieBlueDeed()
{
LootType = LootType.Blessed;
}
public MountedPixieBlueDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new MountedPixieBlueAddon();
public override int LabelNumber => 1074482; // Mounted pixie
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();
}
}
}

View file

@ -0,0 +1,98 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A71, 0x2A72)]
public class MountedPixieGreenComponent : AddonComponent
{
public MountedPixieGreenComponent() : base(0x2A71)
{
}
public MountedPixieGreenComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074482; // Mounted pixie
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x554, 0x557));
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 class MountedPixieGreenAddon : BaseAddon
{
public MountedPixieGreenAddon()
{
AddComponent(new MountedPixieGreenComponent(), 0, 0, 0);
}
public MountedPixieGreenAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new MountedPixieGreenDeed();
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 MountedPixieGreenDeed : BaseAddonDeed
{
[Constructible]
public MountedPixieGreenDeed()
{
LootType = LootType.Blessed;
}
public MountedPixieGreenDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new MountedPixieGreenAddon();
public override int LabelNumber => 1074482; // Mounted pixie
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();
}
}
}

View file

@ -0,0 +1,98 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A77, 0x2A78)]
public class MountedPixieLimeComponent : AddonComponent
{
public MountedPixieLimeComponent() : base(0x2A77)
{
}
public MountedPixieLimeComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074482; // Mounted pixie
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x55F, 0x561));
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 class MountedPixieLimeAddon : BaseAddon
{
public MountedPixieLimeAddon()
{
AddComponent(new MountedPixieLimeComponent(), 0, 0, 0);
}
public MountedPixieLimeAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new MountedPixieLimeDeed();
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 MountedPixieLimeDeed : BaseAddonDeed
{
[Constructible]
public MountedPixieLimeDeed()
{
LootType = LootType.Blessed;
}
public MountedPixieLimeDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new MountedPixieLimeAddon();
public override int LabelNumber => 1074482; // Mounted pixie
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();
}
}
}

View file

@ -0,0 +1,98 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A73, 0x2A74)]
public class MountedPixieOrangeComponent : AddonComponent
{
public MountedPixieOrangeComponent() : base(0x2A73)
{
}
public MountedPixieOrangeComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074482; // Mounted pixie
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x558, 0x55B));
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 class MountedPixieOrangeAddon : BaseAddon
{
public MountedPixieOrangeAddon()
{
AddComponent(new MountedPixieOrangeComponent(), 0, 0, 0);
}
public MountedPixieOrangeAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new MountedPixieOrangeDeed();
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 MountedPixieOrangeDeed : BaseAddonDeed
{
[Constructible]
public MountedPixieOrangeDeed()
{
LootType = LootType.Blessed;
}
public MountedPixieOrangeDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new MountedPixieOrangeAddon();
public override int LabelNumber => 1074482; // Mounted pixie
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();
}
}
}

View file

@ -0,0 +1,98 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A79, 0x2A7A)]
public class MountedPixieWhiteComponent : AddonComponent
{
public MountedPixieWhiteComponent() : base(0x2A79)
{
}
public MountedPixieWhiteComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074482; // Mounted pixie
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x562, 0x564));
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 class MountedPixieWhiteAddon : BaseAddon
{
public MountedPixieWhiteAddon()
{
AddComponent(new MountedPixieWhiteComponent(), 0, 0, 0);
}
public MountedPixieWhiteAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new MountedPixieWhiteDeed();
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 MountedPixieWhiteDeed : BaseAddonDeed
{
[Constructible]
public MountedPixieWhiteDeed()
{
LootType = LootType.Blessed;
}
public MountedPixieWhiteDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new MountedPixieWhiteAddon();
public override int LabelNumber => 1074482; // Mounted pixie
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();
}
}
}

View file

@ -0,0 +1,159 @@
using System;
namespace Server.Items
{
[FlippableAddon(Direction.South, Direction.East)]
public class SacrificialAltarAddon : BaseAddonContainer
{
private Timer m_Timer;
[Constructible]
public SacrificialAltarAddon() : base(0x2A9B)
{
Direction = Direction.South;
AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
}
public SacrificialAltarAddon(Serial serial) : base(serial)
{
}
public override BaseAddonContainerDeed Deed => new SacrificialAltarDeed();
public override int LabelNumber => 1074818; // Sacrificial Altar
public override int DefaultMaxWeight => 0;
public override int DefaultGumpID => 0x107;
public override int DefaultDropSound => 0x42;
public override bool OnDragDrop(Mobile from, Item dropped)
{
if (!base.OnDragDrop(from, dropped))
return false;
if (TotalItems >= 50)
{
SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
Empty();
}
else
{
SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
m_Timer?.Stop();
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
}
return true;
}
public override bool OnDragDropInto(Mobile from, Item item, Point3D p)
{
if (!base.OnDragDropInto(from, item, p))
return false;
if (TotalItems >= 50)
{
SendLocalizedMessageTo(from, 501478); // The trash is full! Emptying!
Empty();
}
else
{
SendLocalizedMessageTo(from, 1010442); // The item will be deleted in three minutes
m_Timer?.Stop();
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
}
return true;
}
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();
if (Items.Count > 0)
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), Empty);
}
public virtual void Flip(Mobile from, Direction direction)
{
switch (direction)
{
case Direction.East:
ItemID = 0x2A9C;
AddComponent(new LocalizedContainerComponent(0x2A9D, 1074818), 0, -1, 0);
break;
case Direction.South:
ItemID = 0x2A9B;
AddComponent(new LocalizedContainerComponent(0x2A9A, 1074818), 1, 0, 0);
break;
}
}
public virtual void Empty()
{
if (Items.Count > 0)
{
Point3D location = Location;
location.Z += 10;
Effects.SendLocationEffect(location, Map, 0x3709, 10, 10, 0x356, 0);
Effects.PlaySound(location, Map, 0x32E);
if (Items.Count > 0)
for (int i = Items.Count - 1; i >= 0; --i)
{
if (i >= Items.Count)
continue;
Items[i].Delete();
}
}
m_Timer?.Stop();
m_Timer = null;
}
}
public class SacrificialAltarDeed : BaseAddonContainerDeed
{
[Constructible]
public SacrificialAltarDeed()
{
LootType = LootType.Blessed;
}
public SacrificialAltarDeed(Serial serial) : base(serial)
{
}
public override BaseAddonContainer Addon => new SacrificialAltarAddon();
public override int LabelNumber => 1074818; // Sacrificial Altar
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();
}
}
}

View file

@ -0,0 +1,124 @@
using System;
using Server.Network;
namespace Server.Items
{
[Flippable(0x2A65, 0x2A67)]
public class UnsettlingPortraitComponent : AddonComponent
{
private Timer m_Timer;
public UnsettlingPortraitComponent() : base(0x2A65)
{
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
}
public UnsettlingPortraitComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1074480; // Unsettling portrait
public override void OnDoubleClick(Mobile from)
{
if (Utility.InRange(Location, from.Location, 2))
Effects.PlaySound(Location, Map, Utility.RandomMinMax(0x567, 0x568));
else
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Timer?.Stop();
}
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();
m_Timer = Timer.DelayCall(TimeSpan.FromMinutes(3), TimeSpan.FromMinutes(3), ChangeDirection);
}
private void ChangeDirection()
{
if (ItemID == 0x2A65)
ItemID += 1;
else if (ItemID == 0x2A66)
ItemID -= 1;
else if (ItemID == 0x2A67)
ItemID += 1;
else if (ItemID == 0x2A68)
ItemID -= 1;
}
}
public class UnsettlingPortraitAddon : BaseAddon
{
[Constructible]
public UnsettlingPortraitAddon()
{
AddComponent(new UnsettlingPortraitComponent(), 0, 0, 0);
}
public UnsettlingPortraitAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new UnsettlingPortraitDeed();
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 UnsettlingPortraitDeed : BaseAddonDeed
{
[Constructible]
public UnsettlingPortraitDeed()
{
LootType = LootType.Blessed;
}
public UnsettlingPortraitDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new UnsettlingPortraitAddon();
public override int LabelNumber => 1074480; // Unsettling portrait
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();
}
}
}

View file

@ -0,0 +1,130 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HearthOfHomeFire : BaseAddon
{
[Constructible]
public HearthOfHomeFire(bool east)
{
if (east)
{
AddLightComponent(new AddonComponent(0x2352), 0, 0, 0);
AddLightComponent(new AddonComponent(0x2358), 0, -1, 0);
}
else
{
AddLightComponent(new AddonComponent(0x2360), 0, 0, 0);
AddLightComponent(new AddonComponent(0x2366), -1, 0, 0);
}
}
public HearthOfHomeFire(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new HearthOfHomeFireDeed();
private void AddLightComponent(AddonComponent component, int x, int y, int z)
{
component.Light = LightType.Circle150;
AddComponent(component, x, y, z);
}
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 HearthOfHomeFireDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public HearthOfHomeFireDeed()
{
LootType = LootType.Blessed;
}
public HearthOfHomeFireDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new HearthOfHomeFire(m_East);
public override int LabelNumber => 1062919; // Hearth of the Home Fire
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private HearthOfHomeFireDeed m_Deed;
public InternalGump(HearthOfHomeFireDeed deed) : base(150, 50)
{
m_Deed = deed;
AddBackground(0, 0, 350, 250, 0xA28);
AddItem(90, 52, 0x2367);
AddItem(112, 35, 0x2360);
AddButton(70, 35, 0x868, 0x869, 1); // South
AddItem(220, 35, 0x2352);
AddItem(242, 52, 0x2358);
AddButton(185, 35, 0x868, 0x869, 2); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed.Deleted || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,42 @@
namespace Server.Items
{
public class HolySword : Longsword
{
[Constructible]
public HolySword()
{
Hue = 0x482;
LootType = LootType.Blessed;
Slayer = SlayerName.Silver;
Attributes.WeaponDamage = 40;
WeaponAttributes.SelfRepair = 10;
WeaponAttributes.LowerStatReq = 100;
WeaponAttributes.UseBestSkill = 1;
}
public HolySword(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062921; // The Holy Sword
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
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();
}
}
}

View file

@ -0,0 +1,45 @@
namespace Server.Items
{
public class LeggingsOfEmbers : PlateLegs
{
[Constructible]
public LeggingsOfEmbers()
{
Hue = 0x2C;
LootType = LootType.Blessed;
ArmorAttributes.SelfRepair = 10;
ArmorAttributes.MageArmor = 1;
ArmorAttributes.LowerStatReq = 100;
}
public LeggingsOfEmbers(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062911; // Royal Leggings of Embers
public override int BasePhysicalResistance => 15;
public override int BaseFireResistance => 25;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 15;
public override int BaseEnergyResistance => 15;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
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();
}
}
}

View file

@ -0,0 +1,210 @@
using System;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
[Flippable(0x234C, 0x234D)]
public class RoseOfTrinsic : Item, ISecurable
{
private static readonly TimeSpan m_SpawnTime = TimeSpan.FromHours(4.0);
private DateTime m_NextSpawnTime;
private int m_Petals;
private SpawnTimer m_SpawnTimer;
[Constructible]
public RoseOfTrinsic() : base(0x234D)
{
Weight = 1.0;
LootType = LootType.Blessed;
m_Petals = 0;
StartSpawnTimer(TimeSpan.FromMinutes(1.0));
}
public RoseOfTrinsic(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062913; // Rose of Trinsic
[CommandProperty(AccessLevel.GameMaster)]
public int Petals
{
get => m_Petals;
set
{
if (value >= 10)
{
m_Petals = 10;
StopSpawnTimer();
}
else
{
if (value <= 0)
m_Petals = 0;
else
m_Petals = value;
StartSpawnTimer(m_SpawnTime);
}
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public SecureLevel Level{ get; set; }
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1062925, Petals.ToString()); // Petals: ~1_COUNT~
}
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
SetSecureLevelEntry.AddTo(from, this, list);
}
private void StartSpawnTimer(TimeSpan delay)
{
StopSpawnTimer();
m_SpawnTimer = new SpawnTimer(this, delay);
m_SpawnTimer.Start();
m_NextSpawnTime = DateTime.UtcNow + delay;
}
private void StopSpawnTimer()
{
if (m_SpawnTimer != null)
{
m_SpawnTimer.Stop();
m_SpawnTimer = null;
}
}
public override void OnDoubleClick(Mobile from)
{
if (!from.InRange(GetWorldLocation(), 2))
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
else if (Petals > 0)
{
from.AddToBackpack(new RoseOfTrinsicPetal(Petals));
Petals = 0;
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(m_Petals);
writer.WriteDeltaTime(m_NextSpawnTime);
writer.WriteEncodedInt((int)Level);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
m_Petals = reader.ReadEncodedInt();
m_NextSpawnTime = reader.ReadDeltaTime();
Level = (SecureLevel)reader.ReadEncodedInt();
if (m_Petals < 10)
StartSpawnTimer(m_NextSpawnTime - DateTime.UtcNow);
}
private class SpawnTimer : Timer
{
private RoseOfTrinsic m_Rose;
public SpawnTimer(RoseOfTrinsic rose, TimeSpan delay) : base(delay)
{
m_Rose = rose;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
if (m_Rose.Deleted)
return;
m_Rose.m_SpawnTimer = null;
m_Rose.Petals++;
}
}
}
public class RoseOfTrinsicPetal : Item
{
[Constructible]
public RoseOfTrinsicPetal(int amount = 1) : base(0x1021)
{
Stackable = true;
Amount = amount;
Weight = 1.0;
Hue = 0xE;
}
public RoseOfTrinsicPetal(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062926; // Petal of the Rose of Trinsic
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
}
else if (from.GetStatMod("RoseOfTrinsicPetal") != null)
{
from.SendLocalizedMessage(
1062927); // You have eaten one of these recently and eating another would provide no benefit.
}
else
{
from.PlaySound(0x1EE);
from.AddStatMod(new StatMod(StatType.Str, "RoseOfTrinsicPetal", 5, TimeSpan.FromMinutes(5.0)));
Consume();
}
}
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();
}
}
}

View file

@ -0,0 +1,49 @@
namespace Server.Items
{
[Flippable(0x236C, 0x236D)]
public class SamuraiHelm : BaseArmor
{
[Constructible]
public SamuraiHelm() : base(0x236C)
{
Weight = 5.0;
LootType = LootType.Blessed;
Attributes.DefendChance = 15;
ArmorAttributes.SelfRepair = 10;
ArmorAttributes.LowerStatReq = 100;
ArmorAttributes.MageArmor = 1;
}
public SamuraiHelm(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062923; // Ancient Samurai Helm
public override int BasePhysicalResistance => 15;
public override int BaseFireResistance => 10;
public override int BaseColdResistance => 10;
public override int BasePoisonResistance => 15;
public override int BaseEnergyResistance => 10;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
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();
}
}
}

View file

@ -0,0 +1,40 @@
namespace Server.Items
{
public class ShaminoCrossbow : RepeatingCrossbow
{
[Constructible]
public ShaminoCrossbow()
{
Hue = 0x504;
LootType = LootType.Blessed;
Attributes.AttackChance = 15;
Attributes.WeaponDamage = 40;
WeaponAttributes.SelfRepair = 10;
WeaponAttributes.LowerStatReq = 100;
}
public ShaminoCrossbow(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062915; // Shamino<6E>s Best Crossbow
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
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();
}
}
}

View file

@ -0,0 +1,74 @@
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
[Flippable(0x234E, 0x234F)]
public class TapestryOfSosaria : Item, ISecurable
{
[Constructible]
public TapestryOfSosaria() : base(0x234E)
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public TapestryOfSosaria(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1062917; // The Tapestry of Sosaria
[CommandProperty(AccessLevel.GameMaster)]
public SecureLevel Level{ get; set; }
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
SetSecureLevelEntry.AddTo(from, this, list);
}
public override void OnDoubleClick(Mobile from)
{
if (from.InRange(GetWorldLocation(), 2))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump());
}
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
writer.WriteEncodedInt((int)Level);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
Level = (SecureLevel)reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
public InternalGump() : base(50, 50)
{
AddImage(0, 0, 0x2C95);
}
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class AppleTrunkAddon : BaseAddon
{
[Constructible]
public AppleTrunkAddon()
{
AddComponent(new LocalizedAddonComponent(0xD98, 1076785), 0, 0, 0);
}
public AppleTrunkAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new AppleTrunkDeed();
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 AppleTrunkDeed : BaseAddonDeed
{
[Constructible]
public AppleTrunkDeed()
{
LootType = LootType.Blessed;
}
public AppleTrunkDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new AppleTrunkAddon();
public override int LabelNumber => 1076785; // Apple Trunk
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class BlueDecorativeRugAddon : BaseAddon
{
[Constructible]
public BlueDecorativeRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAD2, 1076589), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAD3, 1076589), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAD4, 1076589), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAD5, 1076589), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAD6, 1076589), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAD7, 1076589), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAD8, 1076589), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAD9, 1076589), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAD1, 1076589), 0, 0, 0);
}
public BlueDecorativeRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BlueDecorativeRugDeed();
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 BlueDecorativeRugDeed : BaseAddonDeed
{
[Constructible]
public BlueDecorativeRugDeed()
{
LootType = LootType.Blessed;
}
public BlueDecorativeRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BlueDecorativeRugAddon();
public override int LabelNumber => 1076589; // Blue decorative rug
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class BlueFancyRugAddon : BaseAddon
{
[Constructible]
public BlueFancyRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAC2, 1076273), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC3, 1076273), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAC4, 1076273), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC5, 1076273), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF6, 1076273), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF7, 1076273), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF8, 1076273), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF9, 1076273), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAFA, 1076273), 0, 0, 0);
}
public BlueFancyRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BlueFancyRugDeed();
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 BlueFancyRugDeed : BaseAddonDeed
{
[Constructible]
public BlueFancyRugDeed()
{
LootType = LootType.Blessed;
}
public BlueFancyRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BlueFancyRugAddon();
public override int LabelNumber => 1076273; // Blue fancy rug
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class BluePlainRugAddon : BaseAddon
{
[Constructible]
public BluePlainRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAC2, 1076585), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC3, 1076585), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAC4, 1076585), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC5, 1076585), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF6, 1076585), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF7, 1076585), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF8, 1076585), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF9, 1076585), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC0, 1076585), 0, 0, 0);
}
public BluePlainRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new BluePlainRugDeed();
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 BluePlainRugDeed : BaseAddonDeed
{
[Constructible]
public BluePlainRugDeed()
{
LootType = LootType.Blessed;
}
public BluePlainRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new BluePlainRugAddon();
public override int LabelNumber => 1076585; // Blue plain rug
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();
}
}
}

View file

@ -0,0 +1,66 @@
namespace Server.Items
{
[Flippable(0x2068, 0x207A)]
public class BoilingCauldronAddon : BaseAddonContainer
{
[Constructible]
public BoilingCauldronAddon() : base(0x2068)
{
AddComponent(new LocalizedContainerComponent(0xFAC, 1076267), 0, 0, 0);
AddComponent(new LocalizedContainerComponent(0x970, 1076267), 0, 0, 8);
}
public BoilingCauldronAddon(Serial serial) : base(serial)
{
}
public override BaseAddonContainerDeed Deed => new BoilingCauldronDeed();
public override int LabelNumber => 1076267; // Boiling Cauldron
public override int DefaultGumpID => 0x9;
public override int DefaultDropSound => 0x42;
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 BoilingCauldronDeed : BaseAddonContainerDeed
{
[Constructible]
public BoilingCauldronDeed()
{
LootType = LootType.Blessed;
}
public BoilingCauldronDeed(Serial serial) : base(serial)
{
}
public override BaseAddonContainer Addon => new BoilingCauldronAddon();
public override int LabelNumber => 1076267; // Boiling Cauldron
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();
}
}
}

View file

@ -0,0 +1,62 @@
namespace Server.Items
{
public class CherryBlossomTreeAddon : BaseAddon
{
[Constructible]
public CherryBlossomTreeAddon()
{
AddComponent(new LocalizedAddonComponent(0x26EE, 1076268), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3122, 1076268), 0, 0, 0);
}
public CherryBlossomTreeAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new CherryBlossomTreeDeed();
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 CherryBlossomTreeDeed : BaseAddonDeed
{
[Constructible]
public CherryBlossomTreeDeed()
{
LootType = LootType.Blessed;
}
public CherryBlossomTreeDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new CherryBlossomTreeAddon();
public override int LabelNumber => 1076268; // Cherry Blossom Tree
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class CherryBlossomTrunkAddon : BaseAddon
{
[Constructible]
public CherryBlossomTrunkAddon()
{
AddComponent(new LocalizedAddonComponent(0x26EE, 1076784), 0, 0, 0);
}
public CherryBlossomTrunkAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new CherryBlossomTrunkDeed();
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 CherryBlossomTrunkDeed : BaseAddonDeed
{
[Constructible]
public CherryBlossomTrunkDeed()
{
LootType = LootType.Blessed;
}
public CherryBlossomTrunkDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new CherryBlossomTrunkAddon();
public override int LabelNumber => 1076784; // Cherry Blossom Trunk
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class CinnamonFancyRugAddon : BaseAddon
{
[Constructible]
public CinnamonFancyRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAE3, 1076587), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAE4, 1076587), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAE5, 1076587), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAE6, 1076587), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAE7, 1076587), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAE8, 1076587), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAE9, 1076587), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAEA, 1076587), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAEB, 1076587), 0, 0, 0);
}
public CinnamonFancyRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new CinnamonFancyRugDeed();
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 CinnamonFancyRugDeed : BaseAddonDeed
{
[Constructible]
public CinnamonFancyRugDeed()
{
LootType = LootType.Blessed;
}
public CinnamonFancyRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new CinnamonFancyRugAddon();
public override int LabelNumber => 1076587; // Cinnamon fancy rug
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();
}
}
}

View file

@ -0,0 +1,203 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class CurtainsComponent : AddonComponent, IDyable
{
public CurtainsComponent(int itemID, int closedID) : base(itemID)
{
ClosedID = closedID;
}
public CurtainsComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076280; // Curtains
public override bool DisplayWeight => false;
[CommandProperty(AccessLevel.GameMaster)]
public int ClosedID{ get; set; }
#region IDyable
public virtual bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
#endregion
public override void OnDoubleClick(Mobile from)
{
base.OnDoubleClick(from);
if (Addon != null)
if (from.InRange(Location, 1))
foreach (AddonComponent c in Addon.Components)
if (c is CurtainsComponent curtain)
{
int temp = curtain.ItemID;
curtain.ItemID = curtain.ClosedID;
curtain.ClosedID = temp;
}
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
writer.Write(ClosedID);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
ClosedID = reader.ReadInt();
}
}
public class CurtainsAddon : BaseAddon
{
[Constructible]
public CurtainsAddon(bool east)
{
if (east) // east
{
AddComponent(new CurtainsComponent(0x3D9E, 0x3DA8), 0, -1, 0);
AddComponent(new CurtainsComponent(0x3DAC, 0x3DAE), 0, 0, 0);
AddComponent(new CurtainsComponent(0x3DA0, 0x3DA6), 0, 2, 0);
AddComponent(new CurtainsComponent(0x3D9F, 0x3DA7), 0, 1, 0);
}
else // south
{
AddComponent(new CurtainsComponent(0x3D9C, 0x3DAD), 0, 0, 0);
AddComponent(new CurtainsComponent(0x3D9D, 0x3DA3), -1, 0, 0);
AddComponent(new CurtainsComponent(0x3DA1, 0x3DA5), 2, 0, 0);
AddComponent(new CurtainsComponent(0x3DAB, 0x3DA4), 1, 0, 0);
}
}
public CurtainsAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new CurtainsDeed();
public override bool RetainDeedHue => true;
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 CurtainsDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public CurtainsDeed()
{
LootType = LootType.Blessed;
}
public CurtainsDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new CurtainsAddon(m_East);
public override int LabelNumber => 1076280; // Curtains
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private CurtainsDeed m_Deed;
public InternalGump(CurtainsDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076581, 0x7FFF); // Please select your curtain position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,60 @@
namespace Server.Items
{
public class FountainAddon : StoneFountainAddon
{
[Constructible]
public FountainAddon()
{
}
public FountainAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new FountainDeed();
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 FountainDeed : BaseAddonDeed
{
[Constructible]
public FountainDeed()
{
LootType = LootType.Blessed;
}
public FountainDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new FountainAddon();
public override int LabelNumber => 1076283; // Fountain
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();
}
}
}

View file

@ -0,0 +1,218 @@
using System;
using Server.Network;
namespace Server.Items
{
public abstract class BaseFruitTreeAddon : BaseAddon
{
private int m_Fruits;
public BaseFruitTreeAddon()
{
Timer.DelayCall(TimeSpan.FromMinutes(5), Respawn);
}
public BaseFruitTreeAddon(Serial serial) : base(serial)
{
}
public abstract override BaseAddonDeed Deed{ get; }
public abstract Item Fruit{ get; }
[CommandProperty(AccessLevel.GameMaster)]
public int Fruits
{
get => m_Fruits;
set
{
if (value < 0)
m_Fruits = 0;
else
m_Fruits = value;
}
}
public override void OnComponentUsed(AddonComponent c, Mobile from)
{
if (from.InRange(c.Location, 2))
{
if (m_Fruits > 0)
{
Item fruit = Fruit;
if (fruit == null)
return;
if (!from.PlaceInBackpack(fruit))
{
fruit.Delete();
from.SendLocalizedMessage(501015); // There is no room in your backpack for the fruit.
}
else
{
if (--m_Fruits == 0)
Timer.DelayCall(TimeSpan.FromMinutes(30), Respawn);
from.SendLocalizedMessage(501016); // You pick some fruit and put it in your backpack.
}
}
else
{
from.SendLocalizedMessage(501017); // There is no more fruit on this tree
}
}
else
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
}
private void Respawn()
{
m_Fruits = Utility.RandomMinMax(1, 4);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
writer.Write(m_Fruits);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
m_Fruits = reader.ReadInt();
if (m_Fruits == 0)
Respawn();
}
}
public class AppleTreeAddon : BaseFruitTreeAddon
{
[Constructible]
public AppleTreeAddon()
{
AddComponent(new LocalizedAddonComponent(0xD98, 1076269), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3124, 1076269), 0, 0, 0);
}
public AppleTreeAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new AppleTreeDeed();
public override Item Fruit => new Apple();
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 AppleTreeDeed : BaseAddonDeed
{
[Constructible]
public AppleTreeDeed()
{
LootType = LootType.Blessed;
}
public AppleTreeDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new AppleTreeAddon();
public override int LabelNumber => 1076269; // Apple Tree
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 PeachTreeAddon : BaseFruitTreeAddon
{
[Constructible]
public PeachTreeAddon()
{
AddComponent(new LocalizedAddonComponent(0xD9C, 1076270), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3123, 1076270), 0, 0, 0);
}
public PeachTreeAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new PeachTreeDeed();
public override Item Fruit => new Peach();
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 PeachTreeDeed : BaseAddonDeed
{
[Constructible]
public PeachTreeDeed()
{
LootType = LootType.Blessed;
}
public PeachTreeDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new PeachTreeAddon();
public override int LabelNumber => 1076270; // Peach Tree
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class GoldenDecorativeRugAddon : BaseAddon
{
[Constructible]
public GoldenDecorativeRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xADB, 1076586), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xADC, 1076586), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xADD, 1076586), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xADE, 1076586), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xADF, 1076586), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAE0, 1076586), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAE1, 1076586), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAE2, 1076586), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xADA, 1076586), 0, 0, 0);
}
public GoldenDecorativeRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new GoldenDecorativeRugDeed();
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 GoldenDecorativeRugDeed : BaseAddonDeed
{
[Constructible]
public GoldenDecorativeRugDeed()
{
LootType = LootType.Blessed;
}
public GoldenDecorativeRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new GoldenDecorativeRugAddon();
public override int LabelNumber => 1076586; // Golden decorative rug
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();
}
}
}

View file

@ -0,0 +1,167 @@
using System;
using Server.Network;
using Server.Spells;
namespace Server.Items
{
[Flippable(0x125E, 0x1230)]
public class GuillotineComponent : AddonComponent
{
public GuillotineComponent() : base(0x125E)
{
}
public GuillotineComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1024656; // Guillotine
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 GuillotineAddon : BaseAddon
{
[Constructible]
public GuillotineAddon()
{
AddComponent(new GuillotineComponent(), 0, 0, 0);
}
public GuillotineAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new GuillotineDeed();
public override void OnComponentUsed(AddonComponent c, Mobile from)
{
if (from.InRange(Location, 2))
{
if (Utility.RandomBool())
{
from.Location = Location;
Timer.DelayCall(TimeSpan.FromSeconds(0.5), () => Activate(c, from));
}
else
{
from.LocalOverheadMessage(MessageType.Regular, 0,
501777); // Hmm... you suspect that if you used this again, it might hurt.
}
}
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 virtual void Activate(AddonComponent c, Mobile from)
{
if (c.ItemID == 0x125E || c.ItemID == 0x1269 || c.ItemID == 0x1260)
c.ItemID = 0x1269;
else
c.ItemID = 0x1247;
// blood
int amount = Utility.RandomMinMax(3, 7);
for (int i = 0; i < amount; i++)
{
int x = c.X + Utility.RandomMinMax(-1, 1);
int y = c.Y + Utility.RandomMinMax(-1, 1);
int z = c.Z;
if (!c.Map.CanFit(x, y, z, 1, false, false))
{
z = c.Map.GetAverageZ(x, y);
if (!c.Map.CanFit(x, y, z, 1, false, false))
continue;
}
Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
blood.MoveToWorld(new Point3D(x, y, z), c.Map);
}
if (from.Female)
from.PlaySound(Utility.RandomMinMax(0x150, 0x153));
else
from.PlaySound(Utility.RandomMinMax(0x15A, 0x15D));
from.LocalOverheadMessage(MessageType.Regular, 0,
501777); // Hmm... you suspect that if you used this again, it might hurt.
SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 2, Deactivate, c);
}
private void Deactivate(AddonComponent c)
{
if (c.ItemID == 0x1269)
c.ItemID = 0x1260;
else if (c.ItemID == 0x1260)
c.ItemID = 0x125E;
else if (c.ItemID == 0x1247)
c.ItemID = 0x1246;
else if (c.ItemID == 0x1246)
c.ItemID = 0x1230;
}
}
public class GuillotineDeed : BaseAddonDeed
{
[Constructible]
public GuillotineDeed()
{
LootType = LootType.Blessed;
}
public GuillotineDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new GuillotineAddon();
public override int LabelNumber => 1024656; // Guillotine
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();
}
}
}

View file

@ -0,0 +1,130 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HangingAxesAddon : BaseAddon
{
[Constructible]
public HangingAxesAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0x156A, 1076271), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x156B, 1076271), 0, -1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0x1568, 1076271), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1569, 1076271), 1, 0, 0);
}
}
public HangingAxesAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new HangingAxesDeed();
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 HangingAxesDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public HangingAxesDeed()
{
LootType = LootType.Blessed;
}
public HangingAxesDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new HangingAxesAddon(m_East);
public override int LabelNumber => 1076271; // Hanging Axes
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private HangingAxesDeed m_Deed;
public InternalGump(HangingAxesDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076745, 0x7FFF); // Please select your hanging axe position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,130 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HangingSwordsAddon : BaseAddon
{
[Constructible]
public HangingSwordsAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0x1566, 1076272), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1567, 1076272), 0, -1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0x1564, 1076272), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x1565, 1076272), 1, 0, 0);
}
}
public HangingSwordsAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new HangingSwordsDeed();
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 HangingSwordsDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public HangingSwordsDeed()
{
LootType = LootType.Blessed;
}
public HangingSwordsDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new HangingSwordsAddon(m_East);
public override int LabelNumber => 1076272; // Hanging Swords
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private HangingSwordsDeed m_Deed;
public InternalGump(HangingSwordsDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076746, 0x7FFF); // Please select your hanging sword position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,167 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HouseLadderAddon : BaseAddon
{
[Constructible]
public HouseLadderAddon(int type)
{
switch (type)
{
case 0: // castle south
AddComponent(new LocalizedAddonComponent(0x3DB2, 1076791), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, 1, 28);
AddComponent(new LocalizedAddonComponent(0x3DB4, 1076791), 0, 2, 20);
break;
case 1: // castle east
AddComponent(new LocalizedAddonComponent(0x3DB3, 1076791), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 1, 0, 28);
AddComponent(new LocalizedAddonComponent(0x3DB5, 1076791), 2, 0, 20);
break;
case 2: // castle north
AddComponent(new LocalizedAddonComponent(0x2FDF, 1076791), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), 0, -1, 28);
AddComponent(new LocalizedAddonComponent(0x3DB6, 1076791), 0, -2, 20);
break;
case 3: // castle west
AddComponent(new LocalizedAddonComponent(0x2FDE, 1076791), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x3F28, 1076791), -1, 0, 28);
AddComponent(new LocalizedAddonComponent(0x3DB7, 1076791), -2, 0, 20);
break;
case 4: // south
AddComponent(new LocalizedAddonComponent(0x3DB2, 1076287), 0, 0, 0);
break;
case 5: // east
AddComponent(new LocalizedAddonComponent(0x3DB3, 1076287), 0, 0, 0);
break;
case 6: // north
AddComponent(new LocalizedAddonComponent(0x2FDF, 1076287), 0, 0, 0);
break;
case 7: // west
AddComponent(new LocalizedAddonComponent(0x2FDE, 1076287), 0, 0, 0);
break;
}
}
public HouseLadderAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new HouseLadderDeed();
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 HouseLadderDeed : BaseAddonDeed
{
private int m_Type;
[Constructible]
public HouseLadderDeed()
{
LootType = LootType.Blessed;
}
public HouseLadderDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new HouseLadderAddon(m_Type);
public override int LabelNumber => 1076287; // Ladder
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private HouseLadderDeed m_Deed;
public InternalGump(HouseLadderDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076780, 0x7FFF); // Please select your ladder position. <br>Use the ladders marked (castle) <br> for accessing the tops of keeps <br> and castles.
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1076794, 0x7FFF); // South (Castle)
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1076795, 0x7FFF); // East (Castle)
AddButton(19, 97, 0x845, 0x846, 3);
AddHtmlLocalized(44, 95, 213, 20, 1076792, 0x7FFF); // North (Castle)
AddButton(19, 121, 0x845, 0x846, 4);
AddHtmlLocalized(44, 119, 213, 20, 1076793, 0x7FFF); // West (Castle)
AddButton(19, 145, 0x845, 0x846, 5);
AddHtmlLocalized(44, 143, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 169, 0x845, 0x846, 6);
AddHtmlLocalized(44, 167, 213, 20, 1075387, 0x7FFF); // East
AddButton(19, 193, 0x845, 0x846, 7);
AddHtmlLocalized(44, 191, 213, 20, 1075389, 0x7FFF); // North
AddButton(19, 217, 0x845, 0x846, 8);
AddHtmlLocalized(44, 215, 213, 20, 1075390, 0x7FFF); // West
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0 || info.ButtonID < 1 || info.ButtonID > 8)
return;
m_Deed.m_Type = info.ButtonID - 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,127 @@
using System;
using Server.Network;
using Server.Spells;
namespace Server.Items
{
public class IronMaidenAddon : BaseAddon
{
public IronMaidenAddon()
{
AddComponent(new LocalizedAddonComponent(0x1249, 1076288), 0, 0, 0);
}
public IronMaidenAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new IronMaidenDeed();
public override void OnComponentUsed(AddonComponent c, Mobile from)
{
if (from.InRange(GetWorldLocation(), 2) && from.InLOS(GetWorldLocation()))
{
if (Utility.RandomBool())
{
from.Location = Location;
c.ItemID = 0x124A;
Timer.DelayCall(TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(0.5), 3, () => Activate(c, from));
}
else
{
from.LocalOverheadMessage(MessageType.Regular, 0,
501777); // Hmm... you suspect that if you used this again, it might hurt.
}
}
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 virtual void Activate(AddonComponent c, Mobile from)
{
c.ItemID += 1;
if (c.ItemID < 0x124D)
return;
// blood
int amount = Utility.RandomMinMax(3, 7);
for (int i = 0; i < amount; i++)
{
int x = c.X + Utility.RandomMinMax(-1, 1);
int y = c.Y + Utility.RandomMinMax(-1, 1);
int z = c.Z;
if (!c.Map.CanFit(x, y, z, 1, false, false))
{
z = c.Map.GetAverageZ(x, y);
if (!c.Map.CanFit(x, y, z, 1, false, false))
continue;
}
Blood blood = new Blood(Utility.RandomMinMax(0x122C, 0x122F));
blood.MoveToWorld(new Point3D(x, y, z), c.Map);
}
if (from.Female)
from.PlaySound(Utility.RandomMinMax(0x150, 0x153));
else
from.PlaySound(Utility.RandomMinMax(0x15A, 0x15D));
from.LocalOverheadMessage(MessageType.Regular, 0,
501777); // Hmm... you suspect that if you used this again, it might hurt.
SpellHelper.Damage(TimeSpan.Zero, from, Utility.Dice(2, 10, 5));
Timer.DelayCall(TimeSpan.FromSeconds(1), () => c.ItemID = 0x1249);
}
}
public class IronMaidenDeed : BaseAddonDeed
{
[Constructible]
public IronMaidenDeed()
{
LootType = LootType.Blessed;
}
public IronMaidenDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new IronMaidenAddon();
public override int LabelNumber => 1076288; // Iron Maiden
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0x3D8E, 0x3D8F)]
public class LargeFishingNetComponent : AddonComponent
{
public LargeFishingNetComponent() : base(0x3D8E)
{
}
public LargeFishingNetComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076285; // Large Fish Net
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 LargeFishingNetAddon : BaseAddon
{
[Constructible]
public LargeFishingNetAddon()
{
AddComponent(new LargeFishingNetComponent(), 0, 0, 0);
}
public LargeFishingNetAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new LargeFishingNetDeed();
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 LargeFishingNetDeed : BaseAddonDeed
{
[Constructible]
public LargeFishingNetDeed()
{
LootType = LootType.Blessed;
}
public LargeFishingNetDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new LargeFishingNetAddon();
public override int LabelNumber => 1076285; // Large Fish Net
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class PeachTrunkAddon : BaseAddon
{
[Constructible]
public PeachTrunkAddon()
{
AddComponent(new LocalizedAddonComponent(0xD9C, 1076786), 0, 0, 0);
}
public PeachTrunkAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new PeachTrunkDeed();
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 PeachTrunkDeed : BaseAddonDeed
{
[Constructible]
public PeachTrunkDeed()
{
LootType = LootType.Blessed;
}
public PeachTrunkDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new PeachTrunkAddon();
public override int LabelNumber => 1076786; // Peach Trunk
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class PinkFancyRugAddon : BaseAddon
{
[Constructible]
public PinkFancyRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAEE, 1076590), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAEF, 1076590), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF0, 1076590), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAF1, 1076590), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF2, 1076590), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF3, 1076590), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xAF4, 1076590), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAF5, 1076590), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAEC, 1076590), 0, 0, 0);
}
public PinkFancyRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new PinkFancyRugDeed();
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 PinkFancyRugDeed : BaseAddonDeed
{
[Constructible]
public PinkFancyRugDeed()
{
LootType = LootType.Blessed;
}
public PinkFancyRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new PinkFancyRugAddon();
public override int LabelNumber => 1076590; // Pink fancy rug
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();
}
}
}

View file

@ -0,0 +1,69 @@
namespace Server.Items
{
public class RedPlainRugAddon : BaseAddon
{
[Constructible]
public RedPlainRugAddon()
{
AddComponent(new LocalizedAddonComponent(0xAC9, 1076588), 1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xACA, 1076588), -1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xACB, 1076588), -1, 1, 0);
AddComponent(new LocalizedAddonComponent(0xACC, 1076588), 1, -1, 0);
AddComponent(new LocalizedAddonComponent(0xACD, 1076588), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xACE, 1076588), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xACF, 1076588), 1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xAD0, 1076588), 0, 1, 0);
AddComponent(new LocalizedAddonComponent(0xAC6, 1076588), 0, 0, 0);
}
public RedPlainRugAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new RedPlainRugDeed();
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 RedPlainRugDeed : BaseAddonDeed
{
[Constructible]
public RedPlainRugDeed()
{
LootType = LootType.Blessed;
}
public RedPlainRugDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new RedPlainRugAddon();
public override int LabelNumber => 1076588; // Red plain rug
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0x1E34, 0x1E35)]
public class ScarecrowComponent : AddonComponent
{
public ScarecrowComponent() : base(0x1E34)
{
}
public ScarecrowComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076608; // Scarecrow
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 ScarecrowAddon : BaseAddon
{
[Constructible]
public ScarecrowAddon()
{
AddComponent(new ScarecrowComponent(), 0, 0, 0);
}
public ScarecrowAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new ScarecrowDeed();
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 ScarecrowDeed : BaseAddonDeed
{
[Constructible]
public ScarecrowDeed()
{
LootType = LootType.Blessed;
}
public ScarecrowDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new ScarecrowAddon();
public override int LabelNumber => 1076608; // Scarecrow
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0x1EA3, 0x1EA4)]
public class SmallFishingNetComponent : AddonComponent
{
public SmallFishingNetComponent() : base(0x1EA3)
{
}
public SmallFishingNetComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076286; // Small Fish Net
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 SmallFishingNetAddon : BaseAddon
{
[Constructible]
public SmallFishingNetAddon()
{
AddComponent(new SmallFishingNetComponent(), 0, 0, 0);
}
public SmallFishingNetAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new SmallFishingNetDeed();
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 SmallFishingNetDeed : BaseAddonDeed
{
[Constructible]
public SmallFishingNetDeed()
{
LootType = LootType.Blessed;
}
public SmallFishingNetDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new SmallFishingNetAddon();
public override int LabelNumber => 1076286; // Small Fish Net
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();
}
}
}

View file

@ -0,0 +1,132 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class StoneStatueAddon : BaseAddon
{
[Constructible]
public StoneStatueAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0x139E, 1076284), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x139F, 1076284), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0x13A0, 1076284), 0, -1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0x129F, 1076284), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0x12A0, 1076284), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0x12A1, 1076284), -1, 0, 0);
}
}
public StoneStatueAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new StoneStatueDeed();
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 StoneStatueDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public StoneStatueDeed()
{
LootType = LootType.Blessed;
}
public StoneStatueDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new StoneStatueAddon(m_East);
public override int LabelNumber => 1076284; // Statue
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private StoneStatueDeed m_Deed;
public InternalGump(StoneStatueDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076579, 0x7FFF); // Please select your statue position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0x3DAA, 0x3DA9)]
public class SuitOfGoldArmorComponent : AddonComponent
{
public SuitOfGoldArmorComponent() : base(0x3DAA)
{
}
public SuitOfGoldArmorComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076265; // Suit of Gold Armor
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 SuitOfGoldArmorAddon : BaseAddon
{
[Constructible]
public SuitOfGoldArmorAddon()
{
AddComponent(new SuitOfGoldArmorComponent(), 0, 0, 0);
}
public SuitOfGoldArmorAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new SuitOfGoldArmorDeed();
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 SuitOfGoldArmorDeed : BaseAddonDeed
{
[Constructible]
public SuitOfGoldArmorDeed()
{
LootType = LootType.Blessed;
}
public SuitOfGoldArmorDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new SuitOfGoldArmorAddon();
public override int LabelNumber => 1076265; // Suit of Gold Armor
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();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
[Flippable(0x3D86, 0x3D87)]
public class SuitOfSilverArmorComponent : AddonComponent
{
public SuitOfSilverArmorComponent() : base(0x3D86)
{
}
public SuitOfSilverArmorComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076266; // Suit of Silver Armor
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 SuitOfSilverArmorAddon : BaseAddon
{
[Constructible]
public SuitOfSilverArmorAddon()
{
AddComponent(new SuitOfSilverArmorComponent(), 0, 0, 0);
}
public SuitOfSilverArmorAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new SuitOfSilverArmorDeed();
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 SuitOfSilverArmorDeed : BaseAddonDeed
{
[Constructible]
public SuitOfSilverArmorDeed()
{
LootType = LootType.Blessed;
}
public SuitOfSilverArmorDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new SuitOfSilverArmorAddon();
public override int LabelNumber => 1076266; // Suit of Silver Armor
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class TableWithBlueClothAddon : BaseAddon
{
[Constructible]
public TableWithBlueClothAddon()
{
AddComponent(new LocalizedAddonComponent(0x118C, 1076276), 0, 0, 0);
}
public TableWithBlueClothAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new TableWithBlueClothDeed();
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 TableWithBlueClothDeed : BaseAddonDeed
{
[Constructible]
public TableWithBlueClothDeed()
{
LootType = LootType.Blessed;
}
public TableWithBlueClothDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new TableWithBlueClothAddon();
public override int LabelNumber => 1076276; // Table With A Blue Tablecloth
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class TableWithOrangeClothAddon : BaseAddon
{
[Constructible]
public TableWithOrangeClothAddon()
{
AddComponent(new LocalizedAddonComponent(0x118E, 1076278), 0, 0, 0);
}
public TableWithOrangeClothAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new TableWithOrangeClothDeed();
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 TableWithOrangeClothDeed : BaseAddonDeed
{
[Constructible]
public TableWithOrangeClothDeed()
{
LootType = LootType.Blessed;
}
public TableWithOrangeClothDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new TableWithOrangeClothAddon();
public override int LabelNumber => 1076278; // Table With An Orange Tablecloth
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class TableWithPurpleClothAddon : BaseAddon
{
[Constructible]
public TableWithPurpleClothAddon()
{
AddComponent(new LocalizedAddonComponent(0x118B, 1076275), 0, 0, 0);
}
public TableWithPurpleClothAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new TableWithPurpleClothDeed();
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 TableWithPurpleClothDeed : BaseAddonDeed
{
[Constructible]
public TableWithPurpleClothDeed()
{
LootType = LootType.Blessed;
}
public TableWithPurpleClothDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new TableWithPurpleClothAddon();
public override int LabelNumber => 1076275; // Table With A Purple Tablecloth
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();
}
}
}

View file

@ -0,0 +1,61 @@
namespace Server.Items
{
public class TableWithRedClothAddon : BaseAddon
{
[Constructible]
public TableWithRedClothAddon()
{
AddComponent(new LocalizedAddonComponent(0x118D, 1076277), 0, 0, 0);
}
public TableWithRedClothAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new TableWithRedClothDeed();
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 TableWithRedClothDeed : BaseAddonDeed
{
[Constructible]
public TableWithRedClothDeed()
{
LootType = LootType.Blessed;
}
public TableWithRedClothDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new TableWithRedClothAddon();
public override int LabelNumber => 1076277; // Table With A Red Tablecloth
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();
}
}
}

View file

@ -0,0 +1,134 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class UnmadeBedAddon : BaseAddon
{
[Constructible]
public UnmadeBedAddon(bool east)
{
if (east) // east
{
AddComponent(new LocalizedAddonComponent(0xA8C, 1076279), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0xA8D, 1076279), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xA90, 1076279), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xA91, 1076279), -1, -1, 0);
}
else // south
{
AddComponent(new LocalizedAddonComponent(0xDB0, 1076279), 0, 0, 0);
AddComponent(new LocalizedAddonComponent(0xDB1, 1076279), -1, 0, 0);
AddComponent(new LocalizedAddonComponent(0xDB4, 1076279), 0, -1, 0);
AddComponent(new LocalizedAddonComponent(0xDB5, 1076279), -1, -1, 0);
}
}
public UnmadeBedAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new UnmadeBedDeed();
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 UnmadeBedDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public UnmadeBedDeed()
{
LootType = LootType.Blessed;
}
public UnmadeBedDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new UnmadeBedAddon(m_East);
public override int LabelNumber => 1076279; // Unmade Bed
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private UnmadeBedDeed m_Deed;
public InternalGump(UnmadeBedDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076580, 0x7FFF); // Pleae select your unmade bed position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,127 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class VanityAddon : BaseAddonContainer
{
[Constructible]
public VanityAddon(bool east) : base(east ? 0xA44 : 0xA3C)
{
if (east) // east
AddComponent(new AddonContainerComponent(0xA45), 0, -1, 0);
else // south
AddComponent(new AddonContainerComponent(0xA3D), -1, 0, 0);
}
public VanityAddon(Serial serial) : base(serial)
{
}
public override BaseAddonContainerDeed Deed => new VanityDeed();
public override int LabelNumber => 1074027; // Vanity
public override int DefaultGumpID => 0x51;
public override int DefaultDropSound => 0x42;
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 VanityDeed : BaseAddonContainerDeed
{
private bool m_East;
[Constructible]
public VanityDeed()
{
LootType = LootType.Blessed;
}
public VanityDeed(Serial serial) : base(serial)
{
}
public override BaseAddonContainer Addon => new VanityAddon(m_East);
public override int LabelNumber => 1074027; // Vanity
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private VanityDeed m_Deed;
public InternalGump(VanityDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076744, 0x7FFF); // Please select your vanity position.
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,119 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x3D98, 0x3D94)]
public class WallTorchComponent : AddonComponent
{
public WallTorchComponent() : base(0x3D98)
{
}
public WallTorchComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076282; // Wall Torch
public override void OnDoubleClick(Mobile from)
{
if (from.InRange(Location, 2))
{
switch (ItemID)
{
case 0x3D98:
ItemID = 0x3D9B;
break;
case 0x3D9B:
ItemID = 0x3D98;
break;
case 0x3D94:
ItemID = 0x3D97;
break;
case 0x3D97:
ItemID = 0x3D94;
break;
}
Effects.PlaySound(Location, Map, 0x3BE);
}
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 class WallTorchAddon : BaseAddon
{
public WallTorchAddon()
{
AddComponent(new WallTorchComponent(), 0, 0, 0);
}
public WallTorchAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new WallTorchDeed();
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 WallTorchDeed : BaseAddonDeed
{
[Constructible]
public WallTorchDeed()
{
LootType = LootType.Blessed;
}
public WallTorchDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new WallTorchAddon();
public override int LabelNumber => 1076282; // Wall Torch
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();
}
}
}

View file

@ -0,0 +1,159 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class WoodenCoffinComponent : AddonComponent
{
public WoodenCoffinComponent(int itemID) : base(itemID)
{
}
public WoodenCoffinComponent(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076274; // Coffin
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 WoodenCoffinAddon : BaseAddon
{
[Constructible]
public WoodenCoffinAddon(bool east)
{
if (east) // east
{
AddComponent(new WoodenCoffinComponent(0x1C41), 0, 0, 0);
AddComponent(new WoodenCoffinComponent(0x1C42), 1, 0, 0);
AddComponent(new WoodenCoffinComponent(0x1C43), 2, 0, 0);
}
else // south
{
AddComponent(new WoodenCoffinComponent(0x1C4F), 0, 0, 0);
AddComponent(new WoodenCoffinComponent(0x1C50), 0, 1, 0);
AddComponent(new WoodenCoffinComponent(0x1C51), 0, 2, 0);
}
}
public WoodenCoffinAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new WoodenCoffinDeed();
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 WoodenCoffinDeed : BaseAddonDeed
{
private bool m_East;
[Constructible]
public WoodenCoffinDeed()
{
LootType = LootType.Blessed;
}
public WoodenCoffinDeed(Serial serial) : base(serial)
{
}
public override BaseAddon Addon => new WoodenCoffinAddon(m_East);
public override int LabelNumber => 1076274; // Coffin
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
private void SendTarget(Mobile m)
{
base.OnDoubleClick(m);
}
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();
}
private class InternalGump : Gump
{
private WoodenCoffinDeed m_Deed;
public InternalGump(WoodenCoffinDeed deed) : base(60, 36)
{
m_Deed = deed;
AddPage(0);
AddBackground(0, 0, 273, 324, 0x13BE);
AddImageTiled(10, 10, 253, 20, 0xA40);
AddImageTiled(10, 40, 253, 244, 0xA40);
AddImageTiled(10, 294, 253, 20, 0xA40);
AddAlphaRegion(10, 10, 253, 304);
AddButton(10, 294, 0xFB1, 0xFB2, 0);
AddHtmlLocalized(45, 296, 450, 20, 1060051, 0x7FFF); // CANCEL
AddHtmlLocalized(14, 12, 273, 20, 1076748, 0x7FFF); // Please select your coffin position
AddPage(1);
AddButton(19, 49, 0x845, 0x846, 1);
AddHtmlLocalized(44, 47, 213, 20, 1075386, 0x7FFF); // South
AddButton(19, 73, 0x845, 0x846, 2);
AddHtmlLocalized(44, 71, 213, 20, 1075387, 0x7FFF); // East
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false || info.ButtonID == 0)
return;
m_Deed.m_East = info.ButtonID != 1;
m_Deed.SendTarget(sender.Mobile);
}
}
}
}

View file

@ -0,0 +1,58 @@
using Server.Gumps;
namespace Server.Items
{
public interface ITokunoDyable
{
}
public class HeritageToken : Item
{
[Constructible]
public HeritageToken() : base(0x367A)
{
LootType = LootType.Blessed;
Weight = 5.0;
}
public HeritageToken(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1076596; // A Heritage Token
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<HeritageTokenGump>();
from.SendGump(new HeritageTokenGump(this));
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1070998, $"#{1076595}"); // Use this to redeem<br>Your Heritage Items
}
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();
}
}
}

View file

@ -0,0 +1,300 @@
using System;
using System.Collections.Generic;
using Server.Multis;
namespace Server.Items
{
public enum HolidayTreeType
{
Classic,
Modern
}
public class HolidayTree : Item, IAddon
{
private List<Item> m_Components;
public HolidayTree(Mobile from, HolidayTreeType type, Point3D loc) : base(1)
{
Movable = false;
MoveToWorld(loc, from.Map);
Placer = from;
m_Components = new List<Item>();
switch (type)
{
case HolidayTreeType.Classic:
{
ItemID = 0xCD7;
AddItem(0, 0, 0, new TreeTrunk(this, 0xCD6));
AddOrnament(0, 0, 2, 0xF22);
AddOrnament(0, 0, 9, 0xF18);
AddOrnament(0, 0, 15, 0xF20);
AddOrnament(0, 0, 19, 0xF17);
AddOrnament(0, 0, 20, 0xF24);
AddOrnament(0, 0, 20, 0xF1F);
AddOrnament(0, 0, 20, 0xF19);
AddOrnament(0, 0, 21, 0xF1B);
AddOrnament(0, 0, 28, 0xF2F);
AddOrnament(0, 0, 30, 0xF23);
AddOrnament(0, 0, 32, 0xF2A);
AddOrnament(0, 0, 33, 0xF30);
AddOrnament(0, 0, 34, 0xF29);
AddOrnament(0, 1, 7, 0xF16);
AddOrnament(0, 1, 7, 0xF1E);
AddOrnament(0, 1, 12, 0xF0F);
AddOrnament(0, 1, 13, 0xF13);
AddOrnament(0, 1, 18, 0xF12);
AddOrnament(0, 1, 19, 0xF15);
AddOrnament(0, 1, 25, 0xF28);
AddOrnament(0, 1, 29, 0xF1A);
AddOrnament(0, 1, 37, 0xF2B);
AddOrnament(1, 0, 13, 0xF10);
AddOrnament(1, 0, 14, 0xF1C);
AddOrnament(1, 0, 16, 0xF14);
AddOrnament(1, 0, 17, 0xF26);
AddOrnament(1, 0, 22, 0xF27);
break;
}
case HolidayTreeType.Modern:
{
ItemID = 0x1B7E;
AddOrnament(0, 0, 2, 0xF2F);
AddOrnament(0, 0, 2, 0xF20);
AddOrnament(0, 0, 2, 0xF22);
AddOrnament(0, 0, 5, 0xF30);
AddOrnament(0, 0, 5, 0xF15);
AddOrnament(0, 0, 5, 0xF1F);
AddOrnament(0, 0, 5, 0xF2B);
AddOrnament(0, 0, 6, 0xF0F);
AddOrnament(0, 0, 7, 0xF1E);
AddOrnament(0, 0, 7, 0xF24);
AddOrnament(0, 0, 8, 0xF29);
AddOrnament(0, 0, 9, 0xF18);
AddOrnament(0, 0, 14, 0xF1C);
AddOrnament(0, 0, 15, 0xF13);
AddOrnament(0, 0, 15, 0xF20);
AddOrnament(0, 0, 16, 0xF26);
AddOrnament(0, 0, 17, 0xF12);
AddOrnament(0, 0, 18, 0xF17);
AddOrnament(0, 0, 20, 0xF1B);
AddOrnament(0, 0, 23, 0xF28);
AddOrnament(0, 0, 25, 0xF18);
AddOrnament(0, 0, 25, 0xF2A);
AddOrnament(0, 1, 7, 0xF16);
break;
}
}
}
public HolidayTree(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Placer{ get; set; }
public override int LabelNumber => 1041117; // a tree for the holidays
public bool CouldFit(IPoint3D p, Map map)
{
return map.CanFit((Point3D)p, 20);
}
Item IAddon.Deed => new HolidayTreeDeed();
public override void OnAfterDelete()
{
for (int i = 0; i < m_Components.Count; ++i)
m_Components[i].Delete();
}
private void AddOrnament(int x, int y, int z, int itemID)
{
AddItem(x + 1, y + 1, z + 11, new Ornament(itemID));
}
private void AddItem(int x, int y, int z, Item item)
{
item.MoveToWorld(new Point3D(Location.X + x, Location.Y + y, Location.Z + z), Map);
m_Components.Add(item);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write(Placer);
writer.Write(m_Components.Count);
for (int i = 0; i < m_Components.Count; ++i)
writer.Write(m_Components[i]);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
Placer = reader.ReadMobile();
goto case 0;
}
case 0:
{
int count = reader.ReadInt();
m_Components = new List<Item>(count);
for (int i = 0; i < count; ++i)
{
Item item = reader.ReadItem();
if (item != null)
m_Components.Add(item);
}
break;
}
}
Timer.DelayCall(TimeSpan.Zero, ValidatePlacement);
}
public void ValidatePlacement()
{
if (BaseHouse.FindHouseAt(this) == null)
{
HolidayTreeDeed deed = new HolidayTreeDeed();
deed.MoveToWorld(Location, Map);
Delete();
}
}
public override void OnDoubleClick(Mobile from)
{
if (from.InRange(GetWorldLocation(), 1))
{
if (Placer == null || from == Placer || from.AccessLevel >= AccessLevel.GameMaster)
{
from.AddToBackpack(new HolidayTreeDeed());
Delete();
BaseHouse house = BaseHouse.FindHouseAt(this);
if (house?.Addons.Contains(this) == true)
house.Addons.Remove(this);
from.SendLocalizedMessage(503393); // A deed for the tree has been placed in your backpack.
}
else
{
from.SendLocalizedMessage(503396); // You cannot take this tree down.
}
}
else
{
from.SendLocalizedMessage(500446); // That is too far away.
}
}
private class Ornament : Item
{
public Ornament(int itemID) : base(itemID)
{
Movable = false;
}
public Ornament(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1041118; // a tree ornament
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
private class TreeTrunk : Item
{
private HolidayTree m_Tree;
public TreeTrunk(HolidayTree tree, int itemID) : base(itemID)
{
Movable = false;
MoveToWorld(tree.Location, tree.Map);
m_Tree = tree;
}
public TreeTrunk(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1041117; // a tree for the holidays
public override void OnDoubleClick(Mobile from)
{
if (m_Tree?.Deleted == false)
m_Tree.OnDoubleClick(from);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Tree);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Tree = reader.ReadItem() as HolidayTree;
if (m_Tree == null)
Delete();
break;
}
}
}
}
}
}

View file

@ -0,0 +1,37 @@
namespace Server.Items
{
[Furniture]
[Flippable(0x232A, 0x232B)]
public class GiftBox : BaseContainer
{
[Constructible]
public GiftBox() : this(Utility.RandomDyedHue())
{
}
[Constructible]
public GiftBox(int hue) : base(Utility.Random(0x232A, 2))
{
Weight = 2.0;
Hue = hue;
}
public GiftBox(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,62 @@
namespace Server.Items
{
public class GingerBreadHouseAddon : BaseAddon
{
public GingerBreadHouseAddon()
{
for (int i = 0x2be5; i < 0x2be8; i++)
{
LocalizedAddonComponent laoc = new LocalizedAddonComponent(i, 1077395); // Gingerbread House
laoc.Light = LightType.SouthSmall;
AddComponent(laoc, i == 0x2be5 ? -1 : 0, i == 0x2be7 ? -1 : 0, 0);
}
}
public GingerBreadHouseAddon(Serial serial) : base(serial)
{
}
public override BaseAddonDeed Deed => new GingerBreadHouseDeed();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GingerBreadHouseDeed : BaseAddonDeed
{
[Constructible]
public GingerBreadHouseDeed()
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public GingerBreadHouseDeed(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077394; //a Gingerbread House Deed
public override BaseAddon Addon => new GingerBreadHouseAddon();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,111 @@
namespace Server.Items
{
public class HolidayBell : Item
{
private static string[] m_StaffNames =
{
"Adrick",
"Alai",
"Bulldoz",
"Evocare",
"FierY-iCe",
"Greyburn",
"Hanse",
"Ignatz",
"Jalek",
"LadyMOI",
"Lord Krum",
"Malantus",
"Nimrond",
"Oaks",
"Prophet",
"Runesabre",
"Sage",
"Stellerex",
"T-Bone",
"Tajima",
"Tyrant",
"Vex"
};
private static int[] m_Hues =
{
0xA, 0x24, 0x42, 0x56, 0x1A, 0x4C, 0x3C, 0x60, 0x2E, 0x55, 0x23, 0x38, 0x482, 0x6, 0x10
};
private string m_Maker;
private int m_SoundID;
[Constructible]
public HolidayBell()
: this(m_StaffNames[Utility.Random(m_StaffNames.Length)])
{
}
[Constructible]
public HolidayBell(string maker)
: base(0x1C12)
{
m_Maker = maker;
LootType = LootType.Blessed;
Hue = m_Hues[Utility.Random(m_Hues.Length)];
SoundID = 0x0F5 + Utility.Random(14);
}
public HolidayBell(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public int SoundID
{
get => m_SoundID;
set
{
m_SoundID = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public string Giver
{
get => m_Maker;
set => m_Maker = value;
}
public override string DefaultName => $"A Holiday Bell From {Giver}";
public override void OnDoubleClick(Mobile from)
{
if (!from.InRange(GetWorldLocation(), 2))
from.SendLocalizedMessage(500446); // That is too far away.
else from.PlaySound(m_SoundID);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Maker);
writer.WriteEncodedInt(m_SoundID);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Maker = reader.ReadString();
m_SoundID = reader.ReadEncodedInt();
Utility.Intern(ref m_Maker);
}
}
}

View file

@ -0,0 +1,165 @@
using System;
using System.Collections.Generic;
namespace Server.Items
{
public class CandyCane : Food
{
[Constructible]
public CandyCane()
: this(0x2bdd + Utility.Random(4))
{
}
public CandyCane(int itemID) : base(itemID, 1)
{
Stackable = false;
LootType = LootType.Blessed;
}
public CandyCane(Serial serial)
: base(serial)
{
}
private static Dictionary<Mobile, CandyCaneTimer> m_ToothAches = new Dictionary<Mobile, CandyCaneTimer>();
private static CandyCaneTimer EnsureTimer(Mobile from)
{
if (!m_ToothAches.TryGetValue(from, out CandyCaneTimer timer))
m_ToothAches[from] = timer = new CandyCaneTimer(from);
return timer;
}
public static int GetToothAche(Mobile from)
{
return m_ToothAches.TryGetValue(from, out CandyCaneTimer timer) ? timer.Eaten : 0;
}
public static void SetToothAche(Mobile from, int value)
{
EnsureTimer(from).Eaten = value;
}
public override bool CheckHunger(Mobile from)
{
EnsureTimer(from).Eaten += 32;
from.SendLocalizedMessage(1077387); // You feel as if you could eat as much as you wanted!
return true;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public class CandyCaneTimer : Timer
{
public CandyCaneTimer(Mobile eater)
: base(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30))
{
Eater = eater;
Priority = TimerPriority.FiveSeconds;
Start();
}
public Mobile Eater{ get; }
public int Eaten{ get; set; }
protected override void OnTick()
{
--Eaten;
if (Eater?.Deleted != false || Eaten <= 0)
{
Stop();
m_ToothAches.Remove(Eater);
}
else if (Eater.Map != Map.Internal && Eater.Alive)
{
if (Eaten > 60)
{
Eater.Say(1077388 + Utility.Random(5));
/* ARRGH! My tooth hurts sooo much!
* You just can't find a good Britannian dentist these days...
* My teeth!
* MAKE IT STOP!
* AAAH! It feels like someone kicked me in the teeth!
*/
if (Utility.RandomBool() && Eater.Body.IsHuman && !Eater.Mounted)
Eater.Animate(32, 5, 1, true, false, 0);
}
else if (Eaten == 60)
{
Eater.SendLocalizedMessage(1077393); // The extreme pain in your teeth subsides.
}
}
}
}
}
public class GingerBreadCookie : Food
{
private readonly int[] m_Messages =
{
0,
1077396, // Noooo!
1077397, // Please don't eat me... *whimper*
1077405, // Not the face!
1077406, // Ahhhhhh! My foot<6F>s gone!
1077407, // Please. No! I have gingerkids!
1077408, // No, no! I<>m really made of poison. Really.
1077409 // Run, run as fast as you can! You can't catch me! I'm the gingerbread man!
};
[Constructible]
public GingerBreadCookie()
: base(Utility.RandomBool() ? 0x2be1 : 0x2be2, 1)
{
Stackable = false;
LootType = LootType.Blessed;
}
public GingerBreadCookie(Serial serial)
: base(serial)
{
}
public override bool Eat(Mobile from)
{
int message = m_Messages[Utility.Random(m_Messages.Length)];
if (message != 0)
{
SendLocalizedMessageTo(from, message);
return false;
}
return base.Eat(from);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,220 @@
namespace Server.Items
{
public class GiftBoxHues
{
/* there's possibly a couple more, but this is what we could verify on OSI */
private static readonly int[] m_NormalHues =
{
0x672,
0x454,
0x507,
0x4ac,
0x504,
0x84b,
0x495,
0x97c,
0x493,
0x4a8,
0x494,
0x4aa,
0xb8b,
0x84f,
0x491,
0x851,
0x503,
0xb8c,
0x4ab,
0x84B
};
private static readonly int[] m_NeonHues =
{
0x438,
0x424,
0x433,
0x445,
0x42b,
0x448
};
public static int RandomGiftBoxHue => m_NormalHues[Utility.Random(m_NormalHues.Length)];
public static int RandomNeonBoxHue => m_NeonHues[Utility.Random(m_NeonHues.Length)];
}
[Flippable(0x46A5, 0x46A6)]
public class GiftBoxRectangle : BaseContainer
{
[Constructible]
public GiftBoxRectangle()
: base(Utility.RandomBool() ? 0x46A5 : 0x46A6)
{
Hue = GiftBoxHues.RandomGiftBoxHue;
}
public GiftBoxRectangle(Serial serial)
: base(serial)
{
}
public override int DefaultGumpID => 0x11E;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GiftBoxCube : BaseContainer
{
[Constructible]
public GiftBoxCube()
: base(0x46A2)
{
Hue = GiftBoxHues.RandomGiftBoxHue;
}
public GiftBoxCube(Serial serial)
: base(serial)
{
}
public override int DefaultGumpID => 0x11B;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GiftBoxCylinder : BaseContainer
{
[Constructible]
public GiftBoxCylinder()
: base(0x46A3)
{
Hue = GiftBoxHues.RandomGiftBoxHue;
}
public GiftBoxCylinder(Serial serial)
: base(serial)
{
}
public override int DefaultGumpID => 0x11C;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GiftBoxOctogon : BaseContainer
{
[Constructible]
public GiftBoxOctogon()
: base(0x46A4)
{
Hue = GiftBoxHues.RandomGiftBoxHue;
}
public GiftBoxOctogon(Serial serial)
: base(serial)
{
}
public override int DefaultGumpID => 0x11D;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GiftBoxAngel : BaseContainer
{
[Constructible]
public GiftBoxAngel()
: base(0x46A7)
{
Hue = GiftBoxHues.RandomGiftBoxHue;
}
public GiftBoxAngel(Serial serial)
: base(serial)
{
}
public override int DefaultGumpID => 0x11F;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x232A, 0x232B)]
public class GiftBoxNeon : BaseContainer
{
[Constructible]
public GiftBoxNeon()
: base(Utility.RandomBool() ? 0x232A : 0x232B)
{
Hue = GiftBoxHues.RandomNeonBoxHue;
}
public GiftBoxNeon(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,153 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HolidayPottedPlant : Item
{
[Constructible]
public HolidayPottedPlant()
: this(Utility.RandomMinMax(0x11C8, 0x11CC))
{
}
[Constructible]
public HolidayPottedPlant(int itemID)
: base(itemID)
{
}
public HolidayPottedPlant(Serial serial)
: base(serial)
{
}
public override bool ForceShowProperties => ObjectPropertyList.Enabled;
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 PottedPlantDeed : Item
{
[Constructible]
public PottedPlantDeed()
: base(0x14F0)
{
LootType = LootType.Blessed;
}
public PottedPlantDeed(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1041114; // A deed for a potted plant.
public override double DefaultWeight => 1.0;
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
}
}
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();
}
private class InternalGump : Gump
{
private PottedPlantDeed m_Deed;
public InternalGump(PottedPlantDeed deed) : base(100, 200)
{
m_Deed = deed;
Closable = true;
Disposable = true;
Draggable = true;
Resizable = false;
AddPage(0);
AddBackground(0, 0, 360, 195, 0xA28);
AddPage(1);
AddLabel(45, 15, 0, "Choose a Potted Plant:");
AddItem(45, 75, 0x11C8);
AddButton(55, 50, 0x845, 0x846, 1);
AddItem(100, 75, 0x11C9);
AddButton(115, 50, 0x845, 0x846, 2);
AddItem(160, 75, 0x11CA);
AddButton(175, 50, 0x845, 0x846, 3);
AddItem(225, 75, 0x11CB);
AddButton(235, 50, 0x845, 0x846, 4);
AddItem(280, 75, 0x11CC);
AddButton(295, 50, 0x845, 0x846, 5);
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false)
return;
Mobile from = sender.Mobile;
if (!m_Deed.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it
return;
}
int index = info.ButtonID - 1;
if (index >= 0 && index <= 4)
{
HolidayPottedPlant plant = new HolidayPottedPlant(0x11C8 + index);
if (!from.PlaceInBackpack(plant))
{
plant.Delete();
from.SendLocalizedMessage(1078837); // Your backpack is full! Please make room and try again.
}
else
{
m_Deed.Delete();
}
}
}
}
}
}

View file

@ -0,0 +1,36 @@
namespace Server.Items
{
public class HolidayTimepiece : Clock
{
[Constructible]
public HolidayTimepiece()
: base(0x1086)
{
Weight = DefaultWeight;
LootType = LootType.Blessed;
Layer = Layer.Bracelet;
}
public HolidayTimepiece(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1041113; // a holiday timepiece
public override double DefaultWeight => 1.0;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,170 @@
namespace Server.Items
{
public class IcicleLargeSouth : Item
{
[Constructible]
public IcicleLargeSouth()
: base(0x4572)
{
}
public IcicleLargeSouth(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class IcicleMedSouth : Item
{
[Constructible]
public IcicleMedSouth()
: base(0x4573)
{
}
public IcicleMedSouth(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class IcicleSmallSouth : Item
{
[Constructible]
public IcicleSmallSouth()
: base(0x4574)
{
}
public IcicleSmallSouth(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class IcicleLargeEast : Item
{
[Constructible]
public IcicleLargeEast()
: base(0x4575)
{
}
public IcicleLargeEast(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class IcicleMedEast : Item
{
[Constructible]
public IcicleMedEast()
: base(0x4576)
{
}
public IcicleMedEast(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class IcicleSmallEast : Item
{
[Constructible]
public IcicleSmallEast()
: base(0x4577)
{
}
public IcicleSmallEast(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using Server.Mobiles;
using Server.Spells;
namespace Server.Items
{
public class IcyPatch : Item
{
/* On OSI, the iceypatch with itemid 0x122a is "rarer", so we will give it 1:10 chance of creating it that way */
[Constructible]
public IcyPatch()
: this(Utility.Random(10) == 0 ? 0x122A : 0x122F)
{
}
public IcyPatch(int itemid)
: base(itemid)
{
Hue = 0x481;
}
public IcyPatch(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1095159; //An Icy Patch
public override double DefaultWeight => 5.0;
public override bool OnMoveOver(Mobile m)
{
if (m is PlayerMobile && m.Alive && m.AccessLevel == AccessLevel.Player)
switch (Utility.Random(3))
{
case 0:
RunSequence(m, 1095160, false);
break; //You steadily walk over the slippery surface.
case 1:
RunSequence(m, 1095161, true);
break; //You skillfully manage to maintain your balance.
default:
RunSequence(m, 1095162, true);
break; //You lose your footing and ungracefully splatter on the ground.
}
return base.OnMoveOver(m);
}
public virtual void RunSequence(Mobile m, int message, bool freeze)
{
if (freeze)
{
m.Frozen = true;
Timer.DelayCall(TimeSpan.FromSeconds(message == 1095162 ? 2.0 : 1.25), EndFall_Callback, m);
}
m.SendLocalizedMessage(message);
int action = 0;
int sound = 0;
if (message == 1095162)
{
if (m.Mounted)
m.Mount.Rider = null;
Point3D p = new Point3D(Location);
if (SpellHelper.FindValidSpawnLocation(Map, ref p, true))
Timer.DelayCall(TimeSpan.FromSeconds(0), () => m.MoveToWorld(p, m.Map));
action = 21 + Utility.Random(2);
sound = m.Female ? 0x317 : 0x426;
}
else if (message == 1095161)
{
action = 17;
sound = m.Female ? 0x319 : 0x429;
}
if (action > 0)
Timer.DelayCall(TimeSpan.FromSeconds(0.4), from => BeginFall_Callback(from, action, sound), m);
}
private static void BeginFall_Callback(Mobile m, int action, int sound)
{
if (!m.Mounted)
m.Animate(action, 1, 1, false, true, 0);
m.PlaySound(sound);
}
private static void EndFall_Callback(Mobile m)
{
m.Frozen = false;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,89 @@
namespace Server.Items
{
public class Coal : Item
{
[Constructible]
public Coal() : base(0x19b9)
{
Stackable = false;
LootType = LootType.Blessed;
Hue = 0x965;
}
public Coal(Serial serial) : base(serial)
{
}
public override string DefaultName => "Coal";
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BadCard : Item
{
[Constructible]
public BadCard() : base(0x14ef)
{
int[] m_CardHues = { 0x45, 0x27, 0x3d0 };
Hue = m_CardHues[Utility.Random(m_CardHues.Length)];
Stackable = false;
LootType = LootType.Blessed;
Movable = true;
}
public BadCard(Serial serial) : base(serial)
{
}
public override int LabelNumber // Maybe next year youll get a better...
=> 1041428;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class Spam : Food
{
[Constructible]
public Spam() : base(0x1044, 1)
{
Stackable = false;
LootType = LootType.Blessed;
}
public Spam(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,58 @@
namespace Server.Items
{
public class RedPoinsettia : Item
{
[Constructible]
public RedPoinsettia() : base(0x2330)
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public RedPoinsettia(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class WhitePoinsettia : Item
{
[Constructible]
public WhitePoinsettia() : base(0x2331)
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public WhitePoinsettia(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,320 @@
namespace Server.Items
{
public class SnowGlobe : Item
{
public SnowGlobe()
: base(0xE2F)
{
LootType = LootType.Blessed;
Light = LightType.Circle150;
}
public SnowGlobe(Serial serial)
: base(serial)
{
}
public override double DefaultWeight => 1.0;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public enum SnowGlobeTypeOne
{
Britain,
Moonglow,
Minoc,
Magincia,
BuccaneersDen,
Trinsic,
Yew,
SkaraBrae,
Jhelom,
Nujelm,
Papua,
Delucia,
Cove,
Ocllo,
SerpentsHold,
EmpathAbbey,
TheLycaeum,
Vesper,
Wind
}
public class SnowGlobeOne : SnowGlobe
{
private SnowGlobeTypeOne m_Type;
[Constructible]
public SnowGlobeOne()
: this((SnowGlobeTypeOne)Utility.Random(19))
{
}
[Constructible]
public SnowGlobeOne(SnowGlobeTypeOne type)
{
m_Type = type;
}
public SnowGlobeOne(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public SnowGlobeTypeOne Place
{
get => m_Type;
set
{
m_Type = value;
InvalidateProperties();
}
}
public override int LabelNumber => 1041454 + (int)m_Type;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.WriteEncodedInt((int)m_Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Type = (SnowGlobeTypeOne)reader.ReadEncodedInt();
break;
}
}
}
}
public enum SnowGlobeTypeTwo
{
AncientCitadel,
BlackthornesCastle,
CityofMontor,
CityofMistas,
ExodusLair,
LakeofFire,
Lakeshire,
PassofKarnaugh,
TheEtherealFortress,
TwinOaksTavern,
ChaosShrine,
ShrineofHumility,
ShrineofSacrifice,
ShrineofCompassion,
ShrineofHonor,
ShrineofHonesty,
ShrineofSpirituality,
ShrineofJustice,
ShrineofValor
}
public class SnowGlobeTwo : SnowGlobe
{
/* Oddly, these are not localized. */
private static readonly string[] m_PlaceNames =
{
/* AncientCitadel */ "Ancient Citadel",
/* BlackthornesCastle */ "Blackthorne's Castle",
/* CityofMontor */ "City of Montor",
/* CityofMistas */ "City of Mistas",
/* ExodusLair */ "Exodus' Lair",
/* LakeofFire */ "Lake of Fire",
/* Lakeshire */ "Lakeshire",
/* PassofKarnaugh */ "Pass of Karnaugh",
/* TheEtherealFortress */ "The Etheral Fortress",
/* TwinOaksTavern */ "Twin Oaks Tavern",
/* ChaosShrine */ "Chaos Shrine",
/* ShrineofHumility */ "Shrine of Humility",
/* ShrineofSacrifice */ "Shrine of Sacrifice",
/* ShrineofCompassion */ "Shrine of Compassion",
/* ShrineofHonor */ "Shrine of Honor",
/* ShrineofHonesty */ "Shrine of Honesty",
/* ShrineofSpirituality */ "Shrine of Spirituality",
/* ShrineofJustice */ "Shrine of Justice",
/* ShrineofValor */ "Shrine of Valor"
};
private SnowGlobeTypeTwo m_Type;
[Constructible]
public SnowGlobeTwo()
: this((SnowGlobeTypeTwo)Utility.Random(19))
{
}
[Constructible]
public SnowGlobeTwo(SnowGlobeTypeTwo type)
{
m_Type = type;
}
public SnowGlobeTwo(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public SnowGlobeTypeTwo Place
{
get => m_Type;
set
{
m_Type = value;
InvalidateProperties();
}
}
public override string DefaultName
{
get
{
int idx = (int)m_Type;
if (idx < 0 || idx >= m_PlaceNames.Length)
return "a snowy scene";
return $"a snowy scene of {m_PlaceNames[idx]}";
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.WriteEncodedInt((int)m_Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Type = (SnowGlobeTypeTwo)reader.ReadEncodedInt();
break;
}
}
}
}
public enum SnowGlobeTypeThree
{
Luna,
Umbra,
Zento,
Heartwood,
Covetous,
Deceit,
Destard,
Hythloth,
Khaldun,
Shame,
Wrong,
Doom,
TheCitadel,
ThePalaceofParoxysmus,
TheBlightedGrove,
ThePrismofLight
}
public class SnowGlobeThree : SnowGlobe
{
private SnowGlobeTypeThree m_Type;
[Constructible]
public SnowGlobeThree()
: this((SnowGlobeTypeThree)Utility.Random(16))
{
}
[Constructible]
public SnowGlobeThree(SnowGlobeTypeThree type)
{
m_Type = type;
}
public SnowGlobeThree(Serial serial)
: base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public SnowGlobeTypeThree Place
{
get => m_Type;
set
{
m_Type = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_Type >= SnowGlobeTypeThree.Covetous)
return 1075440 + ((int)m_Type - 4);
return 1075294 + (int)m_Type;
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.WriteEncodedInt((int)m_Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Type = (SnowGlobeTypeThree)reader.ReadEncodedInt();
break;
}
}
}
}
}

View file

@ -0,0 +1,42 @@
namespace Server.Items
{
public class SnowPileDeco : Item
{
private static readonly int[] m_Types = { 0x8E2, 0x8E0, 0x8E6, 0x8E5, 0x8E3 };
[Constructible]
public SnowPileDeco()
: this(m_Types[Utility.Random(m_Types.Length)])
{
}
[Constructible]
public SnowPileDeco(int itemid)
: base(itemid)
{
Hue = 0x481;
}
public SnowPileDeco(Serial serial)
: base(serial)
{
}
public override string DefaultName => "Snow Pile";
public override double DefaultWeight => 2.0;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,251 @@
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
[Flippable(0x456E, 0x456F)]
public class SnowStatuePegasus : Item
{
[Constructible]
public SnowStatuePegasus()
: base(0x456E)
{
}
public SnowStatuePegasus(Serial serial)
: base(serial)
{
}
public override bool ForceShowProperties => ObjectPropertyList.Enabled;
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();
}
}
[Flippable(0x4578, 0x4579)]
public class SnowStatueSeahorse : Item
{
[Constructible]
public SnowStatueSeahorse()
: base(0x4578)
{
}
public SnowStatueSeahorse(Serial serial)
: base(serial)
{
}
public override bool ForceShowProperties => ObjectPropertyList.Enabled;
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();
}
}
[Flippable(0x457A, 0x457B)]
public class SnowStatueMermaid : Item
{
[Constructible]
public SnowStatueMermaid()
: base(0x457A)
{
}
public SnowStatueMermaid(Serial serial)
: base(serial)
{
}
public override bool ForceShowProperties => ObjectPropertyList.Enabled;
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();
}
}
[Flippable(0x457C, 0x457D)]
public class SnowStatueGriffon : Item
{
[Constructible]
public SnowStatueGriffon()
: base(0x457C)
{
}
public SnowStatueGriffon(Serial serial)
: base(serial)
{
}
public override bool ForceShowProperties => ObjectPropertyList.Enabled;
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 SnowStatueDeed : Item
{
[Constructible]
public SnowStatueDeed()
: base(0x14F0)
{
LootType = LootType.Blessed;
}
public SnowStatueDeed(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1114296; // snow statue deed
public override double DefaultWeight => 1.0;
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.CloseGump<InternalGump>();
from.SendGump(new InternalGump(this));
}
else
{
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
}
}
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();
}
private class InternalGump : Gump
{
private SnowStatueDeed m_Deed;
public InternalGump(SnowStatueDeed deed) : base(100, 200)
{
m_Deed = deed;
Closable = true;
Disposable = true;
Draggable = true;
Resizable = false;
AddPage(0);
AddBackground(0, 0, 360, 225, 0xA28);
AddPage(1);
AddLabel(45, 15, 0, "Select One:");
AddItem(35, 75, 0x456E);
AddButton(65, 50, 0x845, 0x846, 1);
AddItem(120, 75, 0x4578);
AddButton(135, 50, 0x845, 0x846, 2);
AddItem(190, 75, 0x457A);
AddButton(205, 50, 0x845, 0x846, 3);
AddItem(250, 75, 0x457C);
AddButton(275, 50, 0x845, 0x846, 4);
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (m_Deed?.Deleted != false)
return;
Mobile from = sender.Mobile;
if (!m_Deed.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it
return;
}
Item statue;
switch (info.ButtonID)
{
default:
return;
case 1:
statue = new SnowStatuePegasus();
break;
case 2:
statue = new SnowStatueSeahorse();
break;
case 3:
statue = new SnowStatueMermaid();
break;
case 4:
statue = new SnowStatueGriffon();
break;
}
if (!from.PlaceInBackpack(statue))
{
statue.Delete();
from.SendLocalizedMessage(1078837); // Your backpack is full! Please make room and try again.
}
else
{
m_Deed.Delete();
}
}
}
}
}

View file

@ -0,0 +1,58 @@
namespace Server.Items
{
public class BlueSnowflake : Item
{
[Constructible]
public BlueSnowflake() : base(0x232E)
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public BlueSnowflake(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class WhiteSnowflake : Item
{
[Constructible]
public WhiteSnowflake() : base(0x232F)
{
Weight = 1.0;
LootType = LootType.Blessed;
}
public WhiteSnowflake(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,159 @@
namespace Server.Items
{
[Flippable(0x2328, 0x2329)]
public class Snowman : Item, IDyable
{
private string m_Title;
[Constructible]
public Snowman() : this(Utility.RandomDyedHue())
{
}
[Constructible]
public Snowman(int hue) : this(hue, GetRandomTitle())
{
}
[Constructible]
public Snowman(string title) : this(Utility.RandomDyedHue(), title)
{
}
[Constructible]
public Snowman(int hue, string title) : base(Utility.Random(0x2328, 2))
{
Weight = 10.0;
Hue = hue;
LootType = LootType.Blessed;
m_Title = title;
}
public Snowman(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public string Title
{
get => m_Title;
set
{
m_Title = value;
InvalidateProperties();
}
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public static string GetRandomTitle()
{
// All hail OSI staff
string[] titles =
{
/* 1 */ "Backflash",
/* 2 */ "Carbon",
/* 3 */ "Colbalistic",
/* 4 */ "Comforl",
/* 5 */ "Coppacchia",
/* 6 */ "Cyrus",
/* 7 */ "DannyB",
/* 8 */ "DJSoul",
/* 9 */ "DraconisRex",
/* 10 */ "Earia",
/* 11 */ "Foster",
/* 12 */ "Gonzo",
/* 13 */ "Haan",
/* 14 */ "Halona",
/* 15 */ "Hugo",
/* 16 */ "Hyacinth",
/* 17 */ "Imirian",
/* 18 */ "Jinsol",
/* 19 */ "Liciatia",
/* 20 */ "Loewen",
/* 21 */ "Loke",
/* 22 */ "Magnus",
/* 23 */ "Maleki",
/* 24 */ "Morpheus",
/* 25 */ "Obberron",
/* 26 */ "Odee",
/* 27 */ "Orbeus",
/* 28 */ "Pax",
/* 29 */ "Phields",
/* 30 */ "Pigpen",
/* 31 */ "Platinum",
/* 32 */ "Polpol",
/* 33 */ "Prume",
/* 34 */ "Quinnly",
/* 35 */ "Ragnarok",
/* 36 */ "Rend",
/* 37 */ "Roland",
/* 38 */ "RyanM",
/* 39 */ "Screach",
/* 40 */ "Seraph",
/* 41 */ "Silvani",
/* 42 */ "Sherbear",
/* 43 */ "SkyWalker",
/* 44 */ "Snark",
/* 45 */ "Sowl",
/* 46 */ "Spada",
/* 47 */ "Starblade",
/* 48 */ "Tenacious",
/* 49 */ "Tnez",
/* 50 */ "Wasia",
/* 51 */ "Zilo",
/* 52 */ "Zippy",
/* 53 */ "Zoer"
};
if (titles.Length > 0)
return titles[Utility.Random(titles.Length)];
return null;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Title != null)
list.Add(1062841, m_Title); // ~1_NAME~ the Snowman
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write(m_Title);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Title = reader.ReadString();
break;
}
}
Utility.Intern(ref m_Title);
}
}
}

View file

@ -0,0 +1,60 @@
namespace Server.Items
{
[Furniture]
[Flippable(0x2bd9, 0x2bda)]
public class GreenStocking : BaseContainer
{
[Constructible]
public GreenStocking() : base(Utility.Random(0x2BD9, 2))
{
}
public GreenStocking(Serial serial) : base(serial)
{
}
public override int DefaultGumpID => 0x103;
public override int DefaultDropSound => 0x42;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Furniture]
[Flippable(0x2bdb, 0x2bdc)]
public class RedStocking : BaseContainer
{
[Constructible]
public RedStocking() : base(Utility.Random(0x2BDB, 2))
{
}
public RedStocking(Serial serial) : base(serial)
{
}
public override int DefaultGumpID => 0x103;
public override int DefaultDropSound => 0x42;
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
namespace Server.Items
{
[Flippable(0x232A, 0x232B)]
public class WinterGiftPackage2003 : GiftBox
{
[Constructible]
public WinterGiftPackage2003()
{
DropItem(new Snowman());
DropItem(new WreathDeed());
DropItem(new BlueSnowflake());
DropItem(new RedPoinsettia());
}
public WinterGiftPackage2003(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

Some files were not shown because too many files have changed in this diff Show more