113 lines
3.2 KiB
C#
113 lines
3.2 KiB
C#
using Server;
|
|
using System;
|
|
using Server.Mobiles;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public enum PuzzleType
|
|
{
|
|
WestBox, // Maze #1
|
|
EastBox, // Maze #2
|
|
NorthBox // Mastermind
|
|
}
|
|
|
|
public class PuzzleBox : Item
|
|
{
|
|
private PuzzleType m_PuzzleType;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public PuzzleType PuzzleType { get { return m_PuzzleType; } set { m_PuzzleType = value; } }
|
|
|
|
public override int LabelNumber { get { return 1113486; } } // a puzzle box
|
|
|
|
[Constructable]
|
|
public PuzzleBox(PuzzleType type) : base(2472)
|
|
{
|
|
m_PuzzleType = type;
|
|
Movable = false;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if(!from.InRange(this.Location, 3))
|
|
from.SendLocalizedMessage(3000268); // that is too far away.
|
|
else if (from.Backpack != null)
|
|
{
|
|
Type needed;
|
|
Item puzzle = null;
|
|
|
|
Item key = from.Backpack.FindItemByType(typeof(MagicKey));
|
|
Item puzzleItem1 = from.Backpack.FindItemByType(typeof(MazePuzzleItem));
|
|
Item puzzleItem2 = from.Backpack.FindItemByType(typeof(MastermindPuzzleItem));
|
|
|
|
if (key == null)
|
|
{
|
|
int x = Utility.RandomMinMax(1095, 1099);
|
|
int y = Utility.RandomMinMax(1178, 1179);
|
|
int z = -1;
|
|
|
|
Point3D loc = from.Location;
|
|
Point3D p = new Point3D(x, y, z);
|
|
BaseCreature.TeleportPets(from, p, Map.TerMur);
|
|
from.MoveToWorld(p, Map.TerMur);
|
|
|
|
from.PlaySound(0x1FE);
|
|
Effects.SendLocationParticles(EffectItem.Create(loc, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
|
|
Effects.SendLocationParticles(EffectItem.Create(p, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
|
|
}
|
|
|
|
if (puzzleItem1 != null || puzzleItem2 != null)
|
|
{
|
|
from.SendMessage("You already have a puzzle board.");
|
|
return;
|
|
}
|
|
|
|
switch(m_PuzzleType)
|
|
{
|
|
default:
|
|
case PuzzleType.WestBox:
|
|
case PuzzleType.EastBox: needed = typeof(MagicKey); break;
|
|
case PuzzleType.NorthBox: needed = typeof(GoldPuzzleKey); break;
|
|
}
|
|
|
|
Item item = from.Backpack.FindItemByType(needed);
|
|
|
|
if(item != null && key is MagicKey)
|
|
{
|
|
if(m_PuzzleType == PuzzleType.NorthBox)
|
|
puzzle = new MastermindPuzzleItem((MagicKey)key);
|
|
else
|
|
puzzle = new MazePuzzleItem((MagicKey)key);
|
|
}
|
|
|
|
if (puzzle != null)
|
|
{
|
|
if (!from.Backpack.TryDropItem(from, puzzle, true))
|
|
puzzle.Delete();
|
|
else
|
|
from.SendMessage("You recieve a puzzle board.");
|
|
}
|
|
else
|
|
from.SendMessage("You do not have the required key to get that puzzle board.");
|
|
}
|
|
}
|
|
|
|
public PuzzleBox( Serial serial ) : base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0); // ver
|
|
writer.Write((int)m_PuzzleType);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
m_PuzzleType = (PuzzleType)reader.ReadInt();
|
|
}
|
|
}
|
|
} |