72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
using System;
|
|
using ModernUO.Serialization;
|
|
|
|
namespace Server.Items;
|
|
|
|
[PropertyObject]
|
|
[SerializationGenerator(1, false)]
|
|
public partial class TalismanAttribute
|
|
{
|
|
[SerializableField(0)]
|
|
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
|
private Type _type;
|
|
|
|
[SerializableField(1)]
|
|
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
|
private TextDefinition _name;
|
|
|
|
[SerializableField(2)]
|
|
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
|
private int _amount;
|
|
|
|
public TalismanAttribute() : this(null, null)
|
|
{
|
|
}
|
|
|
|
public TalismanAttribute(TalismanAttribute copy)
|
|
{
|
|
if (copy != null)
|
|
{
|
|
_type = copy.Type;
|
|
_name = copy.Name;
|
|
_amount = copy.Amount;
|
|
}
|
|
}
|
|
|
|
public TalismanAttribute(Type type, TextDefinition name, int amount = 0)
|
|
{
|
|
_type = type;
|
|
_name = name;
|
|
_amount = amount;
|
|
}
|
|
|
|
private void Deserialize(IGenericReader reader, int version)
|
|
{
|
|
var flags = reader.ReadEncodedInt();
|
|
|
|
if ((flags & 0x1) != 0)
|
|
{
|
|
_type = AssemblyHandler.FindTypeByFullName(reader.ReadString());
|
|
}
|
|
|
|
if ((flags & 0x2) != 0)
|
|
{
|
|
_name = reader.ReadTextDefinition();
|
|
}
|
|
|
|
if ((flags & 0x4) != 0)
|
|
{
|
|
_amount = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool IsEmpty => _type == null;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool IsItem => _type.IsAssignableTo(typeof(Item));
|
|
|
|
public override string ToString() => _type?.Name ?? "None";
|
|
|
|
public int DamageBonus(Mobile to) => to?.GetType() == _type ? _amount : 0;
|
|
}
|