1031 lines
25 KiB
C#
1031 lines
25 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Server;
|
|
using Server.Mobiles;
|
|
|
|
/*
|
|
** SimpleLever, SimpleSwitch, and CombinationLock
|
|
** Version 1.03
|
|
** updated 5/06/04
|
|
** ArteGordon
|
|
**
|
|
*/
|
|
namespace Server.Items
|
|
{
|
|
public interface ILinkable
|
|
{
|
|
Item Link { set; get; }
|
|
void Activate(Mobile from, int state, ArrayList links);
|
|
}
|
|
|
|
public class SimpleLever : Item, ILinkable
|
|
{
|
|
public enum leverType { Two_State, Three_State }
|
|
|
|
private int m_LeverState = 0;
|
|
private leverType m_LeverType = leverType.Two_State;
|
|
private int m_LeverSound = 936;
|
|
private Item m_TargetItem0 = null;
|
|
private string m_TargetProperty0 = null;
|
|
private Item m_TargetItem1 = null;
|
|
private string m_TargetProperty1 = null;
|
|
private Item m_TargetItem2 = null;
|
|
private string m_TargetProperty2 = null;
|
|
|
|
|
|
private Item m_LinkedItem = null;
|
|
private bool already_being_activated = false;
|
|
|
|
private bool m_Disabled = false;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool Disabled
|
|
{
|
|
set { m_Disabled = value; }
|
|
get { return m_Disabled; }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Link
|
|
{
|
|
set { m_LinkedItem = value; }
|
|
get { return m_LinkedItem; }
|
|
}
|
|
|
|
[Constructable]
|
|
public SimpleLever()
|
|
: base(0x108C)
|
|
{
|
|
Name = "A lever";
|
|
Movable = false;
|
|
}
|
|
|
|
public SimpleLever(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int LeverState
|
|
{
|
|
get { return m_LeverState; }
|
|
set
|
|
{
|
|
// prevent infinite recursion
|
|
if (!already_being_activated)
|
|
{
|
|
already_being_activated = true;
|
|
Activate(null, value, null);
|
|
already_being_activated = false;
|
|
}
|
|
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int LeverSound
|
|
{
|
|
get { return m_LeverSound; }
|
|
set
|
|
{
|
|
m_LeverSound = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public leverType LeverType
|
|
{
|
|
get { return m_LeverType; }
|
|
set
|
|
{
|
|
m_LeverType = value; LeverState = 0;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
new public virtual Direction Direction
|
|
{
|
|
get { return base.Direction; }
|
|
set {
|
|
base.Direction = value;
|
|
SetLeverStatic();
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Target0Item
|
|
{
|
|
get { return m_TargetItem0; }
|
|
set { m_TargetItem0 = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target0Property
|
|
{
|
|
get { return m_TargetProperty0; }
|
|
set { m_TargetProperty0 = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target0ItemName
|
|
{
|
|
get
|
|
{
|
|
if (m_TargetItem0 != null && !m_TargetItem0.Deleted)
|
|
return m_TargetItem0.Name;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Target1Item
|
|
{
|
|
get { return m_TargetItem1; }
|
|
set { m_TargetItem1 = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target1Property
|
|
{
|
|
get { return m_TargetProperty1; }
|
|
set { m_TargetProperty1 = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target1ItemName
|
|
{
|
|
get
|
|
{
|
|
if (m_TargetItem1 != null && !m_TargetItem1.Deleted)
|
|
return
|
|
m_TargetItem1.Name;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Target2Item
|
|
{
|
|
get { return m_TargetItem2; }
|
|
set { m_TargetItem2 = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target2Property
|
|
{
|
|
get { return m_TargetProperty2; }
|
|
set { m_TargetProperty2 = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target2ItemName
|
|
{
|
|
get
|
|
{
|
|
if (m_TargetItem2 != null && !m_TargetItem2.Deleted)
|
|
return m_TargetItem2.Name;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write((int)2); // version
|
|
// version 2
|
|
writer.Write(m_Disabled);
|
|
// version 1
|
|
writer.Write(m_LinkedItem);
|
|
// version 0
|
|
writer.Write(this.m_LeverState);
|
|
writer.Write(this.m_LeverSound);
|
|
int ltype = (int)this.m_LeverType;
|
|
writer.Write(ltype);
|
|
writer.Write(this.m_TargetItem0);
|
|
writer.Write(this.m_TargetProperty0);
|
|
writer.Write(this.m_TargetItem1);
|
|
writer.Write(this.m_TargetProperty1);
|
|
writer.Write(this.m_TargetItem2);
|
|
writer.Write(this.m_TargetProperty2);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
switch (version)
|
|
{
|
|
case 2:
|
|
{
|
|
m_Disabled = reader.ReadBool();
|
|
goto case 1;
|
|
}
|
|
case 1:
|
|
{
|
|
m_LinkedItem = reader.ReadItem();
|
|
goto case 0;
|
|
}
|
|
case 0:
|
|
{
|
|
this.m_LeverState = reader.ReadInt();
|
|
this.m_LeverSound = reader.ReadInt();
|
|
int ltype = reader.ReadInt();
|
|
switch (ltype)
|
|
{
|
|
case (int)leverType.Two_State: this.m_LeverType = leverType.Two_State; break;
|
|
case (int)leverType.Three_State: this.m_LeverType = leverType.Three_State; break;
|
|
|
|
}
|
|
this.m_TargetItem0 = reader.ReadItem();
|
|
this.m_TargetProperty0 = reader.ReadString();
|
|
this.m_TargetItem1 = reader.ReadItem();
|
|
this.m_TargetProperty1 = reader.ReadString();
|
|
this.m_TargetItem2 = reader.ReadItem();
|
|
this.m_TargetProperty2 = reader.ReadString();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void SetLeverStatic()
|
|
{
|
|
|
|
switch (this.Direction)
|
|
{
|
|
case Direction.North:
|
|
case Direction.South:
|
|
case Direction.Right:
|
|
case Direction.Up:
|
|
if (m_LeverType == leverType.Two_State)
|
|
this.ItemID = 0x108c + m_LeverState * 2;
|
|
else
|
|
this.ItemID = 0x108c + m_LeverState;
|
|
break;
|
|
case Direction.East:
|
|
case Direction.West:
|
|
case Direction.Left:
|
|
case Direction.Down:
|
|
if (m_LeverType == leverType.Two_State)
|
|
this.ItemID = 0x1093 + m_LeverState * 2;
|
|
else
|
|
this.ItemID = 0x1093 + m_LeverState;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void Activate(Mobile from, int state, ArrayList links)
|
|
{
|
|
if (Disabled) return;
|
|
|
|
string status_str = null;
|
|
|
|
// assign the lever state
|
|
m_LeverState = state;
|
|
|
|
if (m_LeverState < 0) m_LeverState = 0;
|
|
if (m_LeverState > 1 && m_LeverType == leverType.Two_State) m_LeverState = 1;
|
|
if (m_LeverState > 2) m_LeverState = 2;
|
|
|
|
// update the graphic
|
|
SetLeverStatic();
|
|
|
|
// play the switching sound if possible
|
|
//if (from != null)
|
|
//{
|
|
// from.PlaySound(m_LeverSound);
|
|
//}
|
|
try
|
|
{
|
|
Effects.PlaySound(Location, Map, m_LeverSound);
|
|
}
|
|
catch { }
|
|
|
|
// if a target object has been specified then apply the property modification
|
|
if (m_LeverState == 0 && m_TargetItem0 != null && !m_TargetItem0.Deleted && m_TargetProperty0 != null && m_TargetProperty0.Length > 0)
|
|
{
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty0, m_TargetItem0, from, this, out status_str);
|
|
}
|
|
if (m_LeverState == 1 && m_TargetItem1 != null && !m_TargetItem1.Deleted && m_TargetProperty1 != null && m_TargetProperty1.Length > 0)
|
|
{
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty1, m_TargetItem1, from, this, out status_str);
|
|
}
|
|
if (m_LeverState == 2 && m_TargetItem2 != null && !m_TargetItem2.Deleted && m_TargetProperty2 != null && m_TargetProperty2.Length > 0)
|
|
{
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty2, m_TargetItem2, from, this, out status_str);
|
|
}
|
|
|
|
// if the switch is linked, then activate the link as well
|
|
if (Link != null && Link is ILinkable)
|
|
{
|
|
if (links == null)
|
|
{
|
|
links = new ArrayList();
|
|
}
|
|
// activate other linked objects if they have not already been activated
|
|
if (!links.Contains(this))
|
|
{
|
|
links.Add(this);
|
|
|
|
((ILinkable)Link).Activate(from, state, links);
|
|
}
|
|
}
|
|
|
|
// report any problems to staff
|
|
if (status_str != null && from != null && from.AccessLevel > AccessLevel.Player)
|
|
{
|
|
from.SendMessage("{0}", status_str);
|
|
}
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (from == null || Disabled) return;
|
|
|
|
if (!from.InRange(GetWorldLocation(), 2) || !from.InLOS(this))
|
|
{
|
|
from.SendLocalizedMessage(500446); // That is too far away.
|
|
return;
|
|
}
|
|
|
|
// change the switch state
|
|
m_LeverState = m_LeverState + 1;
|
|
|
|
if (m_LeverState > 1 && m_LeverType == leverType.Two_State) m_LeverState = 0;
|
|
if (m_LeverState > 2) m_LeverState = 0;
|
|
|
|
// carry out the switch actions
|
|
Activate(from, m_LeverState, null);
|
|
|
|
}
|
|
}
|
|
|
|
public class SimpleSwitch : Item, ILinkable
|
|
{
|
|
private int m_SwitchState = 0;
|
|
private int m_SwitchSound = 939;
|
|
private Item m_TargetItem0 = null;
|
|
private string m_TargetProperty0 = null;
|
|
private Item m_TargetItem1 = null;
|
|
private string m_TargetProperty1 = null;
|
|
|
|
private Item m_LinkedItem = null;
|
|
private bool already_being_activated = false;
|
|
|
|
private bool m_Disabled = false;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool Disabled
|
|
{
|
|
set { m_Disabled = value; }
|
|
get { return m_Disabled; }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Link
|
|
{
|
|
set { m_LinkedItem = value; }
|
|
get { return m_LinkedItem; }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SwitchState
|
|
{
|
|
set
|
|
{
|
|
// prevent infinite recursion
|
|
if (!already_being_activated)
|
|
{
|
|
already_being_activated = true;
|
|
Activate(null, value, null);
|
|
already_being_activated = false;
|
|
}
|
|
|
|
InvalidateProperties();
|
|
}
|
|
get { return m_SwitchState; }
|
|
}
|
|
|
|
[Constructable]
|
|
public SimpleSwitch()
|
|
: base(0x108F)
|
|
{
|
|
Name = "A switch";
|
|
Movable = false;
|
|
}
|
|
|
|
public SimpleSwitch(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SwitchSound
|
|
{
|
|
get { return m_SwitchSound; }
|
|
set
|
|
{
|
|
m_SwitchSound = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
new public virtual Direction Direction
|
|
{
|
|
get { return base.Direction; }
|
|
set
|
|
{
|
|
base.Direction = value;
|
|
SetSwitchStatic();
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Target0Item
|
|
{
|
|
get { return m_TargetItem0; }
|
|
set
|
|
{
|
|
m_TargetItem0 = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target0Property
|
|
{
|
|
get { return m_TargetProperty0; }
|
|
set
|
|
{
|
|
m_TargetProperty0 = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target0ItemName
|
|
{
|
|
get
|
|
{
|
|
if (m_TargetItem0 != null && !m_TargetItem0.Deleted)
|
|
return m_TargetItem0.Name;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Target1Item
|
|
{
|
|
get { return m_TargetItem1; }
|
|
set { m_TargetItem1 = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target1Property
|
|
{
|
|
get { return m_TargetProperty1; }
|
|
set
|
|
{
|
|
m_TargetProperty1 = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Target1ItemName
|
|
{
|
|
get
|
|
{
|
|
if (m_TargetItem1 != null && !m_TargetItem1.Deleted)
|
|
return m_TargetItem1.Name;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write((int)2); // version
|
|
// version 2
|
|
writer.Write(this.m_Disabled);
|
|
// version 1
|
|
writer.Write(this.m_LinkedItem);
|
|
// version 0
|
|
writer.Write(this.m_SwitchState);
|
|
writer.Write(this.m_SwitchSound);
|
|
writer.Write(this.m_TargetItem0);
|
|
writer.Write(this.m_TargetProperty0);
|
|
writer.Write(this.m_TargetItem1);
|
|
writer.Write(this.m_TargetProperty1);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
switch (version)
|
|
{
|
|
case 2:
|
|
{
|
|
m_Disabled = reader.ReadBool();
|
|
goto case 1;
|
|
}
|
|
case 1:
|
|
{
|
|
m_LinkedItem = reader.ReadItem();
|
|
goto case 0;
|
|
}
|
|
case 0:
|
|
{
|
|
this.m_SwitchState = reader.ReadInt();
|
|
this.m_SwitchSound = reader.ReadInt();
|
|
this.m_TargetItem0 = reader.ReadItem();
|
|
this.m_TargetProperty0 = reader.ReadString();
|
|
this.m_TargetItem1 = reader.ReadItem();
|
|
this.m_TargetProperty1 = reader.ReadString();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void SetSwitchStatic()
|
|
{
|
|
|
|
switch (this.Direction)
|
|
{
|
|
case Direction.North:
|
|
case Direction.South:
|
|
case Direction.Right:
|
|
case Direction.Up:
|
|
this.ItemID = 0x108f + m_SwitchState;
|
|
break;
|
|
case Direction.East:
|
|
case Direction.West:
|
|
case Direction.Left:
|
|
case Direction.Down:
|
|
this.ItemID = 0x1091 + m_SwitchState;
|
|
break;
|
|
default:
|
|
this.ItemID = 0x108f + m_SwitchState;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void Activate(Mobile from, int state, ArrayList links)
|
|
{
|
|
if (Disabled) return;
|
|
|
|
string status_str = null;
|
|
|
|
// assign the switch state
|
|
m_SwitchState = state;
|
|
|
|
if (m_SwitchState < 0) m_SwitchState = 0;
|
|
if (m_SwitchState > 1) m_SwitchState = 1;
|
|
|
|
// update the graphic
|
|
SetSwitchStatic();
|
|
|
|
//if (from != null)
|
|
//{
|
|
// from.PlaySound(m_SwitchSound);
|
|
//}
|
|
try
|
|
{
|
|
Effects.PlaySound(Location, Map, m_SwitchSound);
|
|
}
|
|
catch { }
|
|
|
|
// if a target object has been specified then apply the property modification
|
|
if (m_SwitchState == 0 && m_TargetItem0 != null && !m_TargetItem0.Deleted && m_TargetProperty0 != null && m_TargetProperty0.Length > 0)
|
|
{
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty0, m_TargetItem0, from, this, out status_str);
|
|
}
|
|
|
|
if (m_SwitchState == 1 && m_TargetItem1 != null && !m_TargetItem1.Deleted && m_TargetProperty1 != null && m_TargetProperty1.Length > 0)
|
|
{
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty1, m_TargetItem1, from, this, out status_str);
|
|
}
|
|
|
|
// if the switch is linked, then activate the link as well
|
|
if (Link != null && Link is ILinkable)
|
|
{
|
|
if (links == null)
|
|
{
|
|
links = new ArrayList();
|
|
}
|
|
// activate other linked objects if they have not already been activated
|
|
if (!links.Contains(this))
|
|
{
|
|
links.Add(this);
|
|
|
|
((ILinkable)Link).Activate(from, state, links);
|
|
}
|
|
}
|
|
|
|
// report any problems to staff
|
|
if (status_str != null && from != null && from.AccessLevel > AccessLevel.Player)
|
|
{
|
|
from.SendMessage("{0}", status_str);
|
|
}
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (from == null || Disabled) return;
|
|
|
|
if (!from.InRange(GetWorldLocation(), 2) || !from.InLOS(this))
|
|
{
|
|
from.SendLocalizedMessage(500446); // That is too far away.
|
|
return;
|
|
}
|
|
|
|
// change the switch state
|
|
m_SwitchState = m_SwitchState + 1;
|
|
|
|
if (m_SwitchState > 1) m_SwitchState = 0;
|
|
|
|
// activate the switch
|
|
Activate(from, m_SwitchState, null);
|
|
}
|
|
}
|
|
|
|
public class CombinationLock : Item
|
|
{
|
|
private int m_Combination = 0;
|
|
private Item m_Digit0Object = null;
|
|
private string m_Digit0Property = null;
|
|
private Item m_Digit1Object = null;
|
|
private string m_Digit1Property = null;
|
|
private Item m_Digit2Object = null;
|
|
private string m_Digit2Property = null;
|
|
private Item m_Digit3Object = null;
|
|
private string m_Digit3Property = null;
|
|
private Item m_Digit4Object = null;
|
|
private string m_Digit4Property = null;
|
|
private Item m_Digit5Object = null;
|
|
private string m_Digit5Property = null;
|
|
private Item m_Digit6Object = null;
|
|
private string m_Digit6Property = null;
|
|
private Item m_Digit7Object = null;
|
|
private string m_Digit7Property = null;
|
|
private Item m_TargetItem = null;
|
|
private string m_TargetProperty = null;
|
|
private int m_CombinationSound = 940;
|
|
|
|
[Constructable]
|
|
public CombinationLock()
|
|
: base(0x1BBF)
|
|
{
|
|
Name = "A combination lock";
|
|
Movable = false;
|
|
}
|
|
|
|
public CombinationLock(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public int SetDigit(int value)
|
|
{
|
|
if (value < 0) return 0;
|
|
if (value > 9) return 9;
|
|
return value;
|
|
}
|
|
|
|
public int CheckDigit(object o, string property)
|
|
{
|
|
if (o == null) return 0;
|
|
if (property == null || property.Length <= 0) return (0);
|
|
Type ptype;
|
|
int ival = -1;
|
|
string testvalue;
|
|
// check to see whether this is a direct value request, or a test
|
|
string[] argtest = BaseXmlSpawner.ParseString(property, 2, "<>!=");
|
|
if (argtest.Length > 1)
|
|
{
|
|
// ok, its a test, so test it
|
|
string status_str;
|
|
if (BaseXmlSpawner.CheckPropertyString(null, o, property, null, out status_str))
|
|
{
|
|
return 1; // true
|
|
}
|
|
else
|
|
return 0; // false
|
|
}
|
|
// otherwise get the value of the property requested
|
|
string result = BaseXmlSpawner.GetPropertyValue(null, o, property, out ptype);
|
|
|
|
string[] arglist = BaseXmlSpawner.ParseString(result, 2, "=");
|
|
if (arglist.Length < 2) return -1;
|
|
string[] arglist2 = BaseXmlSpawner.ParseString(arglist[1], 2, " ");
|
|
if (arglist2.Length > 0)
|
|
{
|
|
testvalue = arglist2[0].Trim();
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
if (BaseXmlSpawner.IsNumeric(ptype))
|
|
{
|
|
try
|
|
{
|
|
ival = Convert.ToInt32(testvalue, 10);
|
|
}
|
|
catch { }
|
|
}
|
|
return ival;
|
|
}
|
|
|
|
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Combination
|
|
{
|
|
get { return m_Combination; }
|
|
set
|
|
{
|
|
m_Combination = value;
|
|
if (m_Combination < 0) m_Combination = 0;
|
|
if (m_Combination > 99999999) m_Combination = 99999999;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit0Object
|
|
{
|
|
get { return m_Digit0Object; }
|
|
set { m_Digit0Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit0Property
|
|
{
|
|
get { return m_Digit0Property; }
|
|
set { m_Digit0Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit0
|
|
{ get { return (CheckDigit(m_Digit0Object, m_Digit0Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit1Object
|
|
{
|
|
get { return m_Digit1Object; }
|
|
set { m_Digit1Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit1Property
|
|
{
|
|
get { return m_Digit1Property; }
|
|
set { m_Digit1Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit1
|
|
{ get { return (CheckDigit(m_Digit1Object, m_Digit1Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit2Object
|
|
{
|
|
get { return m_Digit2Object; }
|
|
set { m_Digit2Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit2Property
|
|
{
|
|
get { return m_Digit2Property; }
|
|
set { m_Digit2Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit2
|
|
{ get { return (CheckDigit(m_Digit2Object, m_Digit2Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit3Object
|
|
{
|
|
get { return m_Digit3Object; }
|
|
set { m_Digit3Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit3Property
|
|
{
|
|
get { return m_Digit3Property; }
|
|
set { m_Digit3Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit3
|
|
{ get { return (CheckDigit(m_Digit3Object, m_Digit3Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit4Object
|
|
{
|
|
get { return m_Digit4Object; }
|
|
set { m_Digit4Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit4Property
|
|
{
|
|
get { return m_Digit4Property; }
|
|
set { m_Digit4Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit4
|
|
{ get { return (CheckDigit(m_Digit4Object, m_Digit4Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit5Object
|
|
{
|
|
get { return m_Digit5Object; }
|
|
set { m_Digit5Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit5Property
|
|
{
|
|
get { return m_Digit5Property; }
|
|
set { m_Digit5Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit5
|
|
{ get { return (CheckDigit(m_Digit5Object, m_Digit5Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit6Object
|
|
{
|
|
get { return m_Digit6Object; }
|
|
set { m_Digit6Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit6Property
|
|
{
|
|
get { return m_Digit6Property; }
|
|
set { m_Digit6Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit6
|
|
{ get { return (CheckDigit(m_Digit6Object, m_Digit6Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item Digit7Object
|
|
{
|
|
get { return m_Digit7Object; }
|
|
set { m_Digit7Object = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string Digit7Property
|
|
{
|
|
get { return m_Digit7Property; }
|
|
set { m_Digit7Property = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int Digit7
|
|
{ get { return (CheckDigit(m_Digit7Object, m_Digit7Property)); } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Item TargetItem
|
|
{
|
|
get { return m_TargetItem; }
|
|
set { m_TargetItem = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string TargetProperty
|
|
{
|
|
get { return m_TargetProperty; }
|
|
set { m_TargetProperty = value; InvalidateProperties(); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public string TargetItemName
|
|
{ get { if (m_TargetItem != null && !m_TargetItem.Deleted) return m_TargetItem.Name; else return null; } }
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int CombinationSound
|
|
{
|
|
get { return m_CombinationSound; }
|
|
set
|
|
{
|
|
m_CombinationSound = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool Matched
|
|
{
|
|
get { return (m_Combination == CurrentValue); }
|
|
}
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
|
|
public int CurrentValue
|
|
{
|
|
get
|
|
{
|
|
int value = Digit0 + Digit1 * 10 + Digit2 * 100 + Digit3 * 1000 + Digit4 * 10000 + Digit5 * 100000 + Digit6 * 1000000 + Digit7 * 10000000;
|
|
return value;
|
|
}
|
|
}
|
|
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write((int)0); // version
|
|
|
|
writer.Write(this.m_Combination);
|
|
writer.Write(this.m_CombinationSound);
|
|
writer.Write(this.m_Digit0Object);
|
|
writer.Write(this.m_Digit0Property);
|
|
writer.Write(this.m_Digit1Object);
|
|
writer.Write(this.m_Digit1Property);
|
|
writer.Write(this.m_Digit2Object);
|
|
writer.Write(this.m_Digit2Property);
|
|
writer.Write(this.m_Digit3Object);
|
|
writer.Write(this.m_Digit3Property);
|
|
writer.Write(this.m_Digit4Object);
|
|
writer.Write(this.m_Digit4Property);
|
|
writer.Write(this.m_Digit5Object);
|
|
writer.Write(this.m_Digit5Property);
|
|
writer.Write(this.m_Digit6Object);
|
|
writer.Write(this.m_Digit6Property);
|
|
writer.Write(this.m_Digit7Object);
|
|
writer.Write(this.m_Digit7Property);
|
|
writer.Write(this.m_TargetItem);
|
|
writer.Write(this.m_TargetProperty);
|
|
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
switch (version)
|
|
{
|
|
case 0:
|
|
{
|
|
this.m_Combination = reader.ReadInt();
|
|
this.m_CombinationSound = reader.ReadInt();
|
|
this.m_Digit0Object = reader.ReadItem();
|
|
this.m_Digit0Property = reader.ReadString();
|
|
this.m_Digit1Object = reader.ReadItem();
|
|
this.m_Digit1Property = reader.ReadString();
|
|
this.m_Digit2Object = reader.ReadItem();
|
|
this.m_Digit2Property = reader.ReadString();
|
|
this.m_Digit3Object = reader.ReadItem();
|
|
this.m_Digit3Property = reader.ReadString();
|
|
this.m_Digit4Object = reader.ReadItem();
|
|
this.m_Digit4Property = reader.ReadString();
|
|
this.m_Digit5Object = reader.ReadItem();
|
|
this.m_Digit5Property = reader.ReadString();
|
|
this.m_Digit6Object = reader.ReadItem();
|
|
this.m_Digit6Property = reader.ReadString();
|
|
this.m_Digit7Object = reader.ReadItem();
|
|
this.m_Digit7Property = reader.ReadString();
|
|
this.m_TargetItem = reader.ReadItem();
|
|
this.m_TargetProperty = reader.ReadString();
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (from == null) return;
|
|
|
|
if (!from.InRange(GetWorldLocation(), 2) || !from.InLOS(this))
|
|
{
|
|
from.SendLocalizedMessage(500446); // That is too far away.
|
|
return;
|
|
}
|
|
string status_str;
|
|
// test the combination and apply the property to the target item
|
|
if (Matched)
|
|
{
|
|
//from.PlaySound(m_CombinationSound);
|
|
try
|
|
{
|
|
Effects.PlaySound(Location, Map, m_CombinationSound);
|
|
}
|
|
catch { }
|
|
|
|
BaseXmlSpawner.ApplyObjectStringProperties(null, m_TargetProperty, m_TargetItem, from, this, out status_str);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|