1536 lines
46 KiB
C#
1536 lines
46 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server.ContextMenus;
|
|
using Server.Engines.Craft;
|
|
using Server.Mobiles;
|
|
using Server.Factions;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public enum GemType
|
|
{
|
|
None,
|
|
StarSapphire,
|
|
Emerald,
|
|
Sapphire,
|
|
Ruby,
|
|
Citrine,
|
|
Amethyst,
|
|
Tourmaline,
|
|
Amber,
|
|
Diamond
|
|
}
|
|
|
|
public abstract class BaseJewel : Item, ICraftable, ISetItem, IWearableDurability, IResource, IVvVItem, IOwnerRestricted, ITalismanProtection, IFactionItem, IArtifact, ICombatEquipment, IQuality
|
|
{
|
|
#region Factions
|
|
private FactionItem m_FactionState;
|
|
|
|
public FactionItem FactionItemState
|
|
{
|
|
get { return m_FactionState; }
|
|
set
|
|
{
|
|
m_FactionState = value;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
private int m_MaxHitPoints;
|
|
private int m_HitPoints;
|
|
|
|
private AosAttributes m_AosAttributes;
|
|
private AosElementAttributes m_AosResistances;
|
|
private AosSkillBonuses m_AosSkillBonuses;
|
|
private SAAbsorptionAttributes m_SAAbsorptionAttributes;
|
|
private NegativeAttributes m_NegativeAttributes;
|
|
private CraftResource m_Resource;
|
|
private GemType m_GemType;
|
|
|
|
#region Stygian Abyss
|
|
private int m_TimesImbued;
|
|
private bool m_IsImbued;
|
|
private int m_GorgonLenseCharges;
|
|
private LenseType m_GorgonLenseType;
|
|
#endregion
|
|
|
|
#region Runic Reforging
|
|
private ItemPower m_ItemPower;
|
|
private ReforgedPrefix m_ReforgedPrefix;
|
|
private ReforgedSuffix m_ReforgedSuffix;
|
|
#endregion
|
|
|
|
private TalismanAttribute m_TalismanProtection;
|
|
|
|
private bool _VvVItem;
|
|
private Mobile _Owner;
|
|
private string _OwnerName;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public TalismanAttribute Protection
|
|
{
|
|
get { return m_TalismanProtection; }
|
|
set { m_TalismanProtection = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool IsVvVItem
|
|
{
|
|
get { return _VvVItem; }
|
|
set { _VvVItem = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Mobile Owner
|
|
{
|
|
get { return _Owner; }
|
|
set { _Owner = value; if (_Owner != null) _OwnerName = _Owner.Name; InvalidateProperties(); }
|
|
}
|
|
|
|
public virtual string OwnerName
|
|
{
|
|
get { return _OwnerName; }
|
|
set { _OwnerName = value; InvalidateProperties(); }
|
|
}
|
|
|
|
private Mobile m_BlessedBy;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Mobile BlessedBy
|
|
{
|
|
get
|
|
{
|
|
return m_BlessedBy;
|
|
}
|
|
set
|
|
{
|
|
m_BlessedBy = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
|
|
{
|
|
base.GetContextMenuEntries(from, list);
|
|
|
|
if (BlessedFor == from && BlessedBy == from && RootParent == from)
|
|
{
|
|
list.Add(new UnBlessEntry(from, this));
|
|
}
|
|
}
|
|
|
|
private class UnBlessEntry : ContextMenuEntry
|
|
{
|
|
private readonly Mobile m_From;
|
|
private readonly BaseJewel m_Item;
|
|
|
|
public UnBlessEntry(Mobile from, BaseJewel item)
|
|
: base(6208, -1)
|
|
{
|
|
m_From = from;
|
|
m_Item = item;
|
|
}
|
|
|
|
public override void OnClick()
|
|
{
|
|
m_Item.BlessedFor = null;
|
|
m_Item.BlessedBy = null;
|
|
|
|
Container pack = m_From.Backpack;
|
|
|
|
if (pack != null)
|
|
{
|
|
pack.DropItem(new PersonalBlessDeed(m_From));
|
|
m_From.SendLocalizedMessage(1062200); // A personal bless deed has been placed in your backpack.
|
|
}
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int MaxHitPoints
|
|
{
|
|
get
|
|
{
|
|
return m_MaxHitPoints;
|
|
}
|
|
set
|
|
{
|
|
m_MaxHitPoints = value;
|
|
|
|
if (m_MaxHitPoints > 255)
|
|
m_MaxHitPoints = 255;
|
|
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int HitPoints
|
|
{
|
|
get
|
|
{
|
|
return m_HitPoints;
|
|
}
|
|
set
|
|
{
|
|
if (value != m_HitPoints && MaxHitPoints > 0)
|
|
{
|
|
m_HitPoints = value;
|
|
|
|
if (m_HitPoints < 0)
|
|
Delete();
|
|
else if (m_HitPoints > MaxHitPoints)
|
|
m_HitPoints = MaxHitPoints;
|
|
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.Player)]
|
|
public AosAttributes Attributes
|
|
{
|
|
get
|
|
{
|
|
return m_AosAttributes;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public AosElementAttributes Resistances
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public AosSkillBonuses SkillBonuses
|
|
{
|
|
get
|
|
{
|
|
return m_AosSkillBonuses;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public SAAbsorptionAttributes AbsorptionAttributes
|
|
{
|
|
get
|
|
{
|
|
return m_SAAbsorptionAttributes;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.Player)]
|
|
public NegativeAttributes NegativeAttributes
|
|
{
|
|
get
|
|
{
|
|
return m_NegativeAttributes;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public CraftResource Resource
|
|
{
|
|
get
|
|
{
|
|
return m_Resource;
|
|
}
|
|
set
|
|
{
|
|
m_Resource = value;
|
|
Hue = CraftResources.GetHue(m_Resource);
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public GemType GemType
|
|
{
|
|
get
|
|
{
|
|
return m_GemType;
|
|
}
|
|
set
|
|
{
|
|
var old = m_GemType;
|
|
m_GemType = value;
|
|
OnGemTypeChange(old);
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
#region SA
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int TimesImbued
|
|
{
|
|
get { return m_TimesImbued; }
|
|
set { m_TimesImbued = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool IsImbued
|
|
{
|
|
get
|
|
{
|
|
if (TimesImbued >= 1 && !m_IsImbued)
|
|
m_IsImbued = true;
|
|
|
|
return m_IsImbued;
|
|
}
|
|
set
|
|
{
|
|
if (TimesImbued >= 1)
|
|
m_IsImbued = true;
|
|
else
|
|
m_IsImbued = value; InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int GorgonLenseCharges
|
|
{
|
|
get { return m_GorgonLenseCharges; }
|
|
set { m_GorgonLenseCharges = value; if (value == 0) m_GorgonLenseType = LenseType.None; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public LenseType GorgonLenseType
|
|
{
|
|
get { return m_GorgonLenseType; }
|
|
set { m_GorgonLenseType = value; InvalidateProperties(); }
|
|
}
|
|
|
|
public virtual int[] BaseResists
|
|
{
|
|
get
|
|
{
|
|
return new int[] { 0, 0, 0, 0, 0 };
|
|
}
|
|
}
|
|
|
|
public virtual void OnAfterImbued(Mobile m, int mod, int value)
|
|
{
|
|
}
|
|
#endregion
|
|
|
|
#region Runic Reforging
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public ReforgedPrefix ReforgedPrefix
|
|
{
|
|
get { return m_ReforgedPrefix; }
|
|
set { m_ReforgedPrefix = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public ReforgedSuffix ReforgedSuffix
|
|
{
|
|
get { return m_ReforgedSuffix; }
|
|
set { m_ReforgedSuffix = value; InvalidateProperties(); }
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public ItemPower ItemPower
|
|
{
|
|
get { return m_ItemPower; }
|
|
set { m_ItemPower = value; InvalidateProperties(); }
|
|
}
|
|
#endregion
|
|
|
|
public override int PhysicalResistance
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances.Physical;
|
|
}
|
|
}
|
|
public override int FireResistance
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances.Fire;
|
|
}
|
|
}
|
|
public override int ColdResistance
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances.Cold;
|
|
}
|
|
}
|
|
public override int PoisonResistance
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances.Poison;
|
|
}
|
|
}
|
|
public override int EnergyResistance
|
|
{
|
|
get
|
|
{
|
|
return m_AosResistances.Energy;
|
|
}
|
|
}
|
|
public virtual int BaseGemTypeNumber
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public virtual int InitMinHits
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
public virtual int InitMaxHits
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public virtual Race RequiredRace
|
|
{
|
|
get
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
public virtual bool CanBeWornByGargoyles
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public override int LabelNumber
|
|
{
|
|
get
|
|
{
|
|
if (m_GemType == GemType.None)
|
|
return base.LabelNumber;
|
|
|
|
return BaseGemTypeNumber + (int)m_GemType - 1;
|
|
}
|
|
}
|
|
|
|
public override double DefaultWeight
|
|
{
|
|
get
|
|
{
|
|
if (NegativeAttributes == null || NegativeAttributes.Unwieldly == 0)
|
|
return base.DefaultWeight;
|
|
|
|
return 50;
|
|
}
|
|
}
|
|
|
|
public override void OnAfterDuped(Item newItem)
|
|
{
|
|
BaseJewel jewel = newItem as BaseJewel;
|
|
|
|
if (jewel == null)
|
|
return;
|
|
|
|
jewel.m_AosAttributes = new AosAttributes(newItem, m_AosAttributes);
|
|
jewel.m_AosResistances = new AosElementAttributes(newItem, m_AosResistances);
|
|
jewel.m_AosSkillBonuses = new AosSkillBonuses(newItem, m_AosSkillBonuses);
|
|
jewel.m_NegativeAttributes = new NegativeAttributes(newItem, m_NegativeAttributes);
|
|
jewel.m_TalismanProtection = new TalismanAttribute(m_TalismanProtection);
|
|
|
|
#region Mondain's Legacy
|
|
jewel.m_SetAttributes = new AosAttributes(newItem, m_SetAttributes);
|
|
jewel.m_SetSkillBonuses = new AosSkillBonuses(newItem, m_SetSkillBonuses);
|
|
#endregion
|
|
|
|
jewel.m_AosSkillBonuses = new AosSkillBonuses(newItem, m_AosSkillBonuses);
|
|
|
|
base.OnAfterDuped(newItem);
|
|
}
|
|
|
|
public virtual int ArtifactRarity
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public override bool DisplayWeight
|
|
{
|
|
get
|
|
{
|
|
if (IsVvVItem)
|
|
return true;
|
|
|
|
return base.DisplayWeight;
|
|
}
|
|
}
|
|
|
|
private Mobile m_Crafter;
|
|
private ItemQuality m_Quality;
|
|
private bool m_PlayerConstructed;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Mobile Crafter
|
|
{
|
|
get
|
|
{
|
|
return m_Crafter;
|
|
}
|
|
set
|
|
{
|
|
m_Crafter = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public ItemQuality Quality
|
|
{
|
|
get
|
|
{
|
|
return m_Quality;
|
|
}
|
|
set
|
|
{
|
|
m_Quality = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public bool PlayerConstructed
|
|
{
|
|
get
|
|
{
|
|
return m_PlayerConstructed;
|
|
}
|
|
set
|
|
{
|
|
m_PlayerConstructed = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
public BaseJewel(int itemID, Layer layer)
|
|
: base(itemID)
|
|
{
|
|
m_AosAttributes = new AosAttributes(this);
|
|
m_AosResistances = new AosElementAttributes(this);
|
|
m_AosSkillBonuses = new AosSkillBonuses(this);
|
|
m_Resource = CraftResource.Iron;
|
|
m_GemType = GemType.None;
|
|
|
|
Layer = layer;
|
|
|
|
m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits);
|
|
|
|
m_SetAttributes = new AosAttributes(this);
|
|
m_SetSkillBonuses = new AosSkillBonuses(this);
|
|
m_SAAbsorptionAttributes = new SAAbsorptionAttributes(this);
|
|
m_NegativeAttributes = new NegativeAttributes(this);
|
|
m_TalismanProtection = new TalismanAttribute();
|
|
}
|
|
|
|
#region Stygian Abyss
|
|
public override bool CanEquip(Mobile from)
|
|
{
|
|
if (BlessedBy != null && BlessedBy != from)
|
|
{
|
|
from.SendLocalizedMessage(1075277); // That item is blessed by another player.
|
|
return false;
|
|
}
|
|
|
|
if (from.IsPlayer())
|
|
{
|
|
if (_Owner != null && _Owner != from)
|
|
{
|
|
from.SendLocalizedMessage(501023); // You must be the owner to use this item.
|
|
return false;
|
|
}
|
|
|
|
if (this is IAccountRestricted && ((IAccountRestricted)this).Account != null)
|
|
{
|
|
Accounting.Account acct = from.Account as Accounting.Account;
|
|
|
|
if (acct == null || acct.Username != ((IAccountRestricted)this).Account)
|
|
{
|
|
from.SendLocalizedMessage(1071296); // This item is Account Bound and your character is not bound to it. You cannot use this item.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (IsVvVItem && !Engines.VvV.ViceVsVirtueSystem.IsVvV(from))
|
|
{
|
|
from.SendLocalizedMessage(1155496); // This item can only be used by VvV participants!
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (from.AccessLevel < AccessLevel.GameMaster)
|
|
{
|
|
bool morph = from.FindItemOnLayer(Layer.Earrings) is MorphEarrings;
|
|
|
|
if (from.Race == Race.Gargoyle && !CanBeWornByGargoyles)
|
|
{
|
|
from.SendLocalizedMessage(1111708); // Gargoyles can't wear
|
|
return false;
|
|
}
|
|
else if (RequiredRace != null && from.Race != RequiredRace && !morph)
|
|
{
|
|
if (RequiredRace == Race.Elf)
|
|
from.SendLocalizedMessage(1072203); // Only Elves may use
|
|
else if (RequiredRace == Race.Gargoyle)
|
|
from.SendLocalizedMessage(1111707); // Only gargoyles can wear
|
|
else
|
|
from.SendMessage("Only {0} may use ", RequiredRace.PluralName);
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return base.CanEquip(from);
|
|
}
|
|
|
|
public virtual int OnHit(BaseWeapon weap , int damageTaken)
|
|
{
|
|
if (m_TimesImbued == 0 && m_MaxHitPoints == 0)
|
|
return damageTaken;
|
|
|
|
//Sanity check incase some one has a bad state Jewel.
|
|
if (m_TimesImbued >= 1 && m_MaxHitPoints == 0)
|
|
return damageTaken;
|
|
|
|
double chance = NegativeAttributes.Antique > 0 ? 80 : 25;
|
|
|
|
if (chance >= Utility.Random(100)) // 25% chance to lower durability
|
|
{
|
|
int wear = 1;
|
|
|
|
if (wear > 0)
|
|
{
|
|
if (m_HitPoints >= wear)
|
|
{
|
|
HitPoints -= wear;
|
|
wear = 0;
|
|
}
|
|
else
|
|
{
|
|
wear -= HitPoints;
|
|
HitPoints = 0;
|
|
}
|
|
|
|
if (wear > 0)
|
|
{
|
|
if (m_MaxHitPoints > wear)
|
|
{
|
|
MaxHitPoints -= wear;
|
|
|
|
if (Parent is Mobile)
|
|
((Mobile)Parent).LocalOverheadMessage(Server.Network.MessageType.Regular, 0x3B2, 1061121); // Your equipment is severely damaged.
|
|
}
|
|
else
|
|
{
|
|
Delete();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return damageTaken;
|
|
}
|
|
|
|
public virtual void UnscaleDurability()
|
|
{
|
|
}
|
|
|
|
public virtual void ScaleDurability()
|
|
{
|
|
}
|
|
|
|
public virtual bool CanFortify { get { return IsImbued == false && NegativeAttributes.Antique < 4; } }
|
|
public virtual bool CanRepair { get { return m_NegativeAttributes.NoRepair == 0; } }
|
|
#endregion
|
|
|
|
public override void OnAdded(object parent)
|
|
{
|
|
if (Core.AOS && parent is Mobile)
|
|
{
|
|
Mobile from = (Mobile)parent;
|
|
|
|
m_AosSkillBonuses.AddTo(from);
|
|
|
|
int strBonus = m_AosAttributes.BonusStr;
|
|
int dexBonus = m_AosAttributes.BonusDex;
|
|
int intBonus = m_AosAttributes.BonusInt;
|
|
|
|
if (strBonus != 0 || dexBonus != 0 || intBonus != 0)
|
|
{
|
|
string modName = Serial.ToString();
|
|
|
|
if (strBonus != 0)
|
|
from.AddStatMod(new StatMod(StatType.Str, modName + "Str", strBonus, TimeSpan.Zero));
|
|
|
|
if (dexBonus != 0)
|
|
from.AddStatMod(new StatMod(StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero));
|
|
|
|
if (intBonus != 0)
|
|
from.AddStatMod(new StatMod(StatType.Int, modName + "Int", intBonus, TimeSpan.Zero));
|
|
}
|
|
|
|
from.CheckStatTimers();
|
|
|
|
#region Mondain's Legacy Sets
|
|
if (IsSetItem)
|
|
{
|
|
m_SetEquipped = SetHelper.FullSetEquipped(from, SetID, Pieces);
|
|
|
|
if (m_SetEquipped)
|
|
{
|
|
m_LastEquipped = true;
|
|
SetHelper.AddSetBonus(from, SetID);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
if (parent is Mobile)
|
|
{
|
|
if (Server.Engines.XmlSpawner2.XmlAttach.CheckCanEquip(this, (Mobile)parent))
|
|
Server.Engines.XmlSpawner2.XmlAttach.CheckOnEquip(this, (Mobile)parent);
|
|
else
|
|
((Mobile)parent).AddToBackpack(this);
|
|
}
|
|
}
|
|
|
|
public override void OnRemoved(object parent)
|
|
{
|
|
if (Core.AOS && parent is Mobile)
|
|
{
|
|
Mobile from = (Mobile)parent;
|
|
|
|
m_AosSkillBonuses.Remove();
|
|
|
|
string modName = Serial.ToString();
|
|
|
|
from.RemoveStatMod(modName + "Str");
|
|
from.RemoveStatMod(modName + "Dex");
|
|
from.RemoveStatMod(modName + "Int");
|
|
|
|
from.CheckStatTimers();
|
|
|
|
#region Mondain's Legacy Sets
|
|
if (IsSetItem && m_SetEquipped)
|
|
SetHelper.RemoveSetBonus(from, SetID, this);
|
|
#endregion
|
|
}
|
|
|
|
Server.Engines.XmlSpawner2.XmlAttach.CheckOnRemoved(this, parent);
|
|
}
|
|
|
|
public virtual void SetProtection(Type type, TextDefinition name, int amount)
|
|
{
|
|
m_TalismanProtection = new TalismanAttribute(type, name, amount);
|
|
}
|
|
|
|
public BaseJewel(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override void AddNameProperty(ObjectPropertyList list)
|
|
{
|
|
if (m_ReforgedPrefix != ReforgedPrefix.None || m_ReforgedSuffix != ReforgedSuffix.None)
|
|
{
|
|
if (m_ReforgedPrefix != ReforgedPrefix.None)
|
|
{
|
|
int prefix = RunicReforging.GetPrefixName(m_ReforgedPrefix);
|
|
|
|
if (m_ReforgedSuffix == ReforgedSuffix.None)
|
|
list.Add(1151757, String.Format("#{0}\t{1}", prefix, GetNameString())); // ~1_PREFIX~ ~2_ITEM~
|
|
else
|
|
list.Add(1151756, String.Format("#{0}\t{1}\t#{2}", prefix, GetNameString(), RunicReforging.GetSuffixName(m_ReforgedSuffix))); // ~1_PREFIX~ ~2_ITEM~ of ~3_SUFFIX~
|
|
}
|
|
else if (m_ReforgedSuffix != ReforgedSuffix.None)
|
|
{
|
|
RunicReforging.AddSuffixName(list, m_ReforgedSuffix, GetNameString());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
base.AddNameProperty(list);
|
|
}
|
|
}
|
|
|
|
private string GetNameString()
|
|
{
|
|
string name = Name;
|
|
|
|
if (name == null)
|
|
name = String.Format("#{0}", LabelNumber);
|
|
|
|
return name;
|
|
}
|
|
|
|
public override void AddCraftedProperties(ObjectPropertyList list)
|
|
{
|
|
if (OwnerName != null)
|
|
list.Add(1153213, OwnerName);
|
|
|
|
if (m_Crafter != null)
|
|
list.Add(1050043, m_Crafter.TitleName); // crafted by ~1_NAME~
|
|
|
|
if (m_Quality == ItemQuality.Exceptional)
|
|
list.Add(1063341); // exceptional
|
|
|
|
if (IsImbued)
|
|
list.Add(1080418); // (Imbued)
|
|
}
|
|
|
|
public override void AddWeightProperty(ObjectPropertyList list)
|
|
{
|
|
base.AddWeightProperty(list);
|
|
|
|
if (IsVvVItem)
|
|
list.Add(1154937); // VvV Item
|
|
}
|
|
|
|
public override void AddNameProperties(ObjectPropertyList list)
|
|
{
|
|
base.AddNameProperties(list);
|
|
|
|
#region Factions
|
|
FactionEquipment.AddFactionProperties(this, list);
|
|
#endregion
|
|
|
|
if (m_GorgonLenseCharges > 0)
|
|
list.Add(1112590, m_GorgonLenseCharges.ToString()); //Gorgon Lens Charges: ~1_val~
|
|
|
|
#region Mondain's Legacy Sets
|
|
if (IsSetItem)
|
|
{
|
|
list.Add(1080240, Pieces.ToString()); // Part of a Jewelry Set (~1_val~ pieces)
|
|
|
|
if (SetID == SetItem.Bestial)
|
|
list.Add(1151541, BestialSetHelper.GetTotalBerserk(this).ToString()); // Berserk ~1_VAL~
|
|
|
|
if (BardMasteryBonus)
|
|
list.Add(1151553); // Activate: Bard Mastery Bonus x2<br>(Effect: 1 min. Cooldown: 30 min.)
|
|
|
|
if (m_SetEquipped)
|
|
{
|
|
list.Add(1080241); // Full Jewelry Set Present
|
|
SetHelper.GetSetProperties(list, this);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
m_NegativeAttributes.GetProperties(list, this);
|
|
m_AosSkillBonuses.GetProperties(list);
|
|
|
|
int prop;
|
|
|
|
#region Stygian Abyss
|
|
if (RequiredRace == Race.Elf)
|
|
list.Add(1075086); // Elves Only
|
|
else if (RequiredRace == Race.Gargoyle)
|
|
list.Add(1111709); // Gargoyles Only
|
|
#endregion
|
|
|
|
if ((prop = ArtifactRarity) > 0)
|
|
list.Add(1061078, prop.ToString()); // artifact rarity ~1_val~
|
|
|
|
if (m_TalismanProtection != null && !m_TalismanProtection.IsEmpty && m_TalismanProtection.Amount > 0)
|
|
list.Add(1072387, "{0}\t{1}", m_TalismanProtection.Name != null ? m_TalismanProtection.Name.ToString() : "Unknown", m_TalismanProtection.Amount); // ~1_NAME~ Protection: +~2_val~%
|
|
|
|
#region SA
|
|
if ((prop = m_SAAbsorptionAttributes.EaterFire) != 0)
|
|
list.Add(1113593, prop.ToString()); // Fire Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.EaterCold) != 0)
|
|
list.Add(1113594, prop.ToString()); // Cold Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.EaterPoison) != 0)
|
|
list.Add(1113595, prop.ToString()); // Poison Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.EaterEnergy) != 0)
|
|
list.Add(1113596, prop.ToString()); // Energy Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.EaterKinetic) != 0)
|
|
list.Add(1113597, prop.ToString()); // Kinetic Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.EaterDamage) != 0)
|
|
list.Add(1113598, prop.ToString()); // Damage Eater ~1_Val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.ResonanceFire) != 0)
|
|
list.Add(1113691, prop.ToString()); // Fire Resonance ~1_val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.ResonanceCold) != 0)
|
|
list.Add(1113692, prop.ToString()); // Cold Resonance ~1_val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.ResonancePoison) != 0)
|
|
list.Add(1113693, prop.ToString()); // Poison Resonance ~1_val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.ResonanceEnergy) != 0)
|
|
list.Add(1113694, prop.ToString()); // Energy Resonance ~1_val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.ResonanceKinetic) != 0)
|
|
list.Add(1113695, prop.ToString()); // Kinetic Resonance ~1_val~%
|
|
|
|
if ((prop = m_SAAbsorptionAttributes.CastingFocus) != 0)
|
|
list.Add(1113696, prop.ToString()); // Casting Focus ~1_val~%
|
|
#endregion
|
|
|
|
if ((prop = m_AosAttributes.SpellChanneling) != 0)
|
|
list.Add(1060482); // spell channeling
|
|
|
|
if ((prop = m_AosAttributes.NightSight) != 0)
|
|
list.Add(1060441); // night sight
|
|
|
|
if ((prop = m_AosAttributes.BonusStr) != 0)
|
|
list.Add(1060485, prop.ToString()); // strength bonus ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.BonusDex) != 0)
|
|
list.Add(1060409, prop.ToString()); // dexterity bonus ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.BonusInt) != 0)
|
|
list.Add(1060432, prop.ToString()); // intelligence bonus ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.BonusHits) != 0)
|
|
list.Add(1060431, prop.ToString()); // hit point increase ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.BonusStam) != 0)
|
|
list.Add(1060484, prop.ToString()); // stamina increase ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.BonusMana) != 0)
|
|
list.Add(1060439, prop.ToString()); // mana increase ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.RegenHits) != 0)
|
|
list.Add(1060444, prop.ToString()); // hit point regeneration ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.RegenStam) != 0)
|
|
list.Add(1060443, prop.ToString()); // stamina regeneration ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.RegenMana) != 0)
|
|
list.Add(1060440, prop.ToString()); // mana regeneration ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.Luck) != 0)
|
|
list.Add(1060436, prop.ToString()); // luck ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.EnhancePotions) != 0)
|
|
list.Add(1060411, prop.ToString()); // enhance potions ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.ReflectPhysical) != 0)
|
|
list.Add(1060442, prop.ToString()); // reflect physical damage ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.AttackChance) != 0)
|
|
list.Add(1060415, prop.ToString()); // hit chance increase ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.WeaponSpeed) != 0)
|
|
list.Add(1060486, prop.ToString()); // swing speed increase ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.WeaponDamage) != 0)
|
|
list.Add(1060401, prop.ToString()); // damage increase ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.DefendChance) != 0)
|
|
list.Add(1060408, prop.ToString()); // defense chance increase ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.CastRecovery) != 0)
|
|
list.Add(1060412, prop.ToString()); // faster cast recovery ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.CastSpeed) != 0)
|
|
list.Add(1060413, prop.ToString()); // faster casting ~1_val~
|
|
|
|
if ((prop = m_AosAttributes.SpellDamage) != 0)
|
|
list.Add(1060483, prop.ToString()); // spell damage increase ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.LowerManaCost) != 0)
|
|
list.Add(1060433, prop.ToString()); // lower mana cost ~1_val~%
|
|
|
|
if ((prop = m_AosAttributes.LowerRegCost) != 0)
|
|
list.Add(1060434, prop.ToString()); // lower reagent cost ~1_val~%
|
|
|
|
if (Core.ML && (prop = m_AosAttributes.IncreasedKarmaLoss) != 0)
|
|
list.Add(1075210, prop.ToString()); // Increased Karma Loss ~1val~%
|
|
|
|
base.AddResistanceProperties(list);
|
|
|
|
Server.Engines.XmlSpawner2.XmlAttach.AddAttachmentProperties(this, list);
|
|
|
|
if (m_HitPoints >= 0 && m_MaxHitPoints > 0)
|
|
list.Add(1060639, "{0}\t{1}", m_HitPoints, m_MaxHitPoints); // durability ~1_val~ / ~2_val~
|
|
|
|
if (IsSetItem && !m_SetEquipped)
|
|
{
|
|
list.Add(1072378); // <br>Only when full set is present:
|
|
SetHelper.GetSetProperties(list, this);
|
|
}
|
|
}
|
|
|
|
public override void AddItemPowerProperties(ObjectPropertyList list)
|
|
{
|
|
if (m_ItemPower != ItemPower.None)
|
|
{
|
|
if (m_ItemPower <= ItemPower.LegendaryArtifact)
|
|
list.Add(1151488 + ((int)m_ItemPower - 1));
|
|
else
|
|
list.Add(1152281 + ((int)m_ItemPower - 9));
|
|
}
|
|
}
|
|
|
|
public virtual void OnGemTypeChange(GemType old)
|
|
{
|
|
}
|
|
|
|
public int GemLocalization()
|
|
{
|
|
switch (m_GemType)
|
|
{
|
|
default:
|
|
case GemType.None: return 0;
|
|
case GemType.StarSapphire: return 1023867;
|
|
case GemType.Emerald: return 1023887;
|
|
case GemType.Sapphire: return 1023887;
|
|
case GemType.Ruby: return 1023868;
|
|
case GemType.Citrine: return 1023875;
|
|
case GemType.Amethyst: return 1023863;
|
|
case GemType.Tourmaline: return 1023872;
|
|
case GemType.Amber: return 1062607;
|
|
case GemType.Diamond: return 1062608;
|
|
}
|
|
}
|
|
|
|
public override void OnSingleClick(Mobile from)
|
|
{
|
|
base.OnSingleClick(from);
|
|
|
|
if (m_Crafter != null)
|
|
{
|
|
LabelTo(from, 1050043, m_Crafter.TitleName); // crafted by ~1_NAME~
|
|
}
|
|
}
|
|
|
|
public override bool DropToWorld(Mobile from, Point3D p)
|
|
{
|
|
bool drop = base.DropToWorld(from, p);
|
|
|
|
EnchantedHotItemSocket.CheckDrop(from, this);
|
|
|
|
return drop;
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.Write(12); // version
|
|
|
|
// Version 12 - removed VvV Item (handled in VvV System) and BlockRepair (Handled as negative attribute)
|
|
|
|
writer.Write(m_SetPhysicalBonus);
|
|
writer.Write(m_SetFireBonus);
|
|
writer.Write(m_SetColdBonus);
|
|
writer.Write(m_SetPoisonBonus);
|
|
writer.Write(m_SetEnergyBonus);
|
|
|
|
writer.Write(m_PlayerConstructed);
|
|
|
|
m_TalismanProtection.Serialize(writer);
|
|
|
|
writer.Write(_Owner);
|
|
writer.Write(_OwnerName);
|
|
|
|
//Version 7
|
|
writer.Write((bool)m_IsImbued);
|
|
|
|
// Version 6
|
|
m_NegativeAttributes.Serialize(writer);
|
|
|
|
// Version 5
|
|
#region Region Reforging
|
|
writer.Write((int)m_ReforgedPrefix);
|
|
writer.Write((int)m_ReforgedSuffix);
|
|
writer.Write((int)m_ItemPower);
|
|
#endregion
|
|
|
|
#region Stygian Abyss
|
|
writer.Write(m_GorgonLenseCharges);
|
|
writer.Write((int)m_GorgonLenseType);
|
|
|
|
// Version 4
|
|
writer.WriteEncodedInt((int)m_TimesImbued);
|
|
|
|
m_SAAbsorptionAttributes.Serialize(writer);
|
|
#endregion
|
|
|
|
writer.Write((Mobile)m_BlessedBy);
|
|
writer.Write((bool)m_LastEquipped);
|
|
writer.Write((bool)m_SetEquipped);
|
|
writer.WriteEncodedInt((int)m_SetHue);
|
|
|
|
m_SetAttributes.Serialize(writer);
|
|
m_SetSkillBonuses.Serialize(writer);
|
|
|
|
writer.Write(m_Crafter);
|
|
writer.Write((int)m_Quality);
|
|
|
|
// Version 3
|
|
writer.WriteEncodedInt((int)m_MaxHitPoints);
|
|
writer.WriteEncodedInt((int)m_HitPoints);
|
|
|
|
writer.WriteEncodedInt((int)m_Resource);
|
|
writer.WriteEncodedInt((int)m_GemType);
|
|
|
|
m_AosAttributes.Serialize(writer);
|
|
m_AosResistances.Serialize(writer);
|
|
m_AosSkillBonuses.Serialize(writer);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
switch (version)
|
|
{
|
|
case 12:
|
|
case 11:
|
|
{
|
|
m_SetPhysicalBonus = reader.ReadInt();
|
|
m_SetFireBonus = reader.ReadInt();
|
|
m_SetColdBonus = reader.ReadInt();
|
|
m_SetPoisonBonus = reader.ReadInt();
|
|
m_SetEnergyBonus = reader.ReadInt();
|
|
goto case 10;
|
|
}
|
|
case 10:
|
|
{
|
|
m_PlayerConstructed = reader.ReadBool();
|
|
goto case 9;
|
|
}
|
|
case 9:
|
|
{
|
|
m_TalismanProtection = new TalismanAttribute(reader);
|
|
goto case 8;
|
|
}
|
|
case 8:
|
|
{
|
|
if (version == 11)
|
|
reader.ReadBool();
|
|
|
|
_Owner = reader.ReadMobile();
|
|
_OwnerName = reader.ReadString();
|
|
goto case 7;
|
|
}
|
|
case 7:
|
|
{
|
|
m_IsImbued = reader.ReadBool();
|
|
goto case 6;
|
|
}
|
|
case 6:
|
|
{
|
|
m_NegativeAttributes = new NegativeAttributes(this, reader);
|
|
goto case 5;
|
|
}
|
|
case 5:
|
|
{
|
|
#region Runic Reforging
|
|
m_ReforgedPrefix = (ReforgedPrefix)reader.ReadInt();
|
|
m_ReforgedSuffix = (ReforgedSuffix)reader.ReadInt();
|
|
m_ItemPower = (ItemPower)reader.ReadInt();
|
|
|
|
if(version < 12 && reader.ReadBool())
|
|
m_NegativeAttributes.NoRepair = 1;
|
|
#endregion
|
|
|
|
#region Stygian Abyss
|
|
m_GorgonLenseCharges = reader.ReadInt();
|
|
m_GorgonLenseType = (LenseType)reader.ReadInt();
|
|
#endregion
|
|
|
|
goto case 4;
|
|
}
|
|
case 4:
|
|
{
|
|
#region Stygian Abyss
|
|
m_TimesImbued = reader.ReadEncodedInt();
|
|
|
|
m_SAAbsorptionAttributes = new SAAbsorptionAttributes(this, reader);
|
|
#endregion
|
|
|
|
m_BlessedBy = reader.ReadMobile();
|
|
m_LastEquipped = reader.ReadBool();
|
|
m_SetEquipped = reader.ReadBool();
|
|
m_SetHue = reader.ReadEncodedInt();
|
|
|
|
m_SetAttributes = new AosAttributes(this, reader);
|
|
m_SetSkillBonuses = new AosSkillBonuses(this, reader);
|
|
|
|
m_Crafter = reader.ReadMobile();
|
|
m_Quality = (ItemQuality)reader.ReadInt();
|
|
goto case 3;
|
|
}
|
|
case 3:
|
|
{
|
|
m_MaxHitPoints = reader.ReadEncodedInt();
|
|
m_HitPoints = reader.ReadEncodedInt();
|
|
|
|
goto case 2;
|
|
}
|
|
case 2:
|
|
{
|
|
m_Resource = (CraftResource)reader.ReadEncodedInt();
|
|
m_GemType = (GemType)reader.ReadEncodedInt();
|
|
|
|
goto case 1;
|
|
}
|
|
case 1:
|
|
{
|
|
m_AosAttributes = new AosAttributes(this, reader);
|
|
m_AosResistances = new AosElementAttributes(this, reader);
|
|
m_AosSkillBonuses = new AosSkillBonuses(this, reader);
|
|
|
|
if (Core.AOS && Parent is Mobile)
|
|
m_AosSkillBonuses.AddTo((Mobile)Parent);
|
|
|
|
int strBonus = m_AosAttributes.BonusStr;
|
|
int dexBonus = m_AosAttributes.BonusDex;
|
|
int intBonus = m_AosAttributes.BonusInt;
|
|
|
|
if (Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0))
|
|
{
|
|
Mobile m = (Mobile)Parent;
|
|
|
|
string modName = Serial.ToString();
|
|
|
|
if (strBonus != 0)
|
|
m.AddStatMod(new StatMod(StatType.Str, modName + "Str", strBonus, TimeSpan.Zero));
|
|
|
|
if (dexBonus != 0)
|
|
m.AddStatMod(new StatMod(StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero));
|
|
|
|
if (intBonus != 0)
|
|
m.AddStatMod(new StatMod(StatType.Int, modName + "Int", intBonus, TimeSpan.Zero));
|
|
}
|
|
|
|
if (Parent is Mobile)
|
|
((Mobile)Parent).CheckStatTimers();
|
|
|
|
break;
|
|
}
|
|
case 0:
|
|
{
|
|
m_AosAttributes = new AosAttributes(this);
|
|
m_AosResistances = new AosElementAttributes(this);
|
|
m_AosSkillBonuses = new AosSkillBonuses(this);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (m_NegativeAttributes == null)
|
|
m_NegativeAttributes = new NegativeAttributes(this);
|
|
|
|
if (m_TalismanProtection == null)
|
|
m_TalismanProtection = new TalismanAttribute();
|
|
|
|
#region Mondain's Legacy Sets
|
|
if (m_SetAttributes == null)
|
|
m_SetAttributes = new AosAttributes(this);
|
|
|
|
if (m_SetSkillBonuses == null)
|
|
m_SetSkillBonuses = new AosSkillBonuses(this);
|
|
#endregion
|
|
|
|
if (version < 2)
|
|
{
|
|
m_Resource = CraftResource.Iron;
|
|
m_GemType = GemType.None;
|
|
}
|
|
}
|
|
|
|
#region ICraftable Members
|
|
|
|
public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, ITool tool, CraftItem craftItem, int resHue)
|
|
{
|
|
PlayerConstructed = true;
|
|
|
|
Type resourceType = typeRes;
|
|
|
|
if (resourceType == null)
|
|
resourceType = craftItem.Resources.GetAt(0).ItemType;
|
|
|
|
if (!craftItem.ForceNonExceptional)
|
|
Resource = CraftResources.GetFromType(resourceType);
|
|
|
|
if (1 < craftItem.Resources.Count)
|
|
{
|
|
resourceType = craftItem.Resources.GetAt(1).ItemType;
|
|
|
|
if (resourceType == typeof(StarSapphire))
|
|
GemType = GemType.StarSapphire;
|
|
else if (resourceType == typeof(Emerald))
|
|
GemType = GemType.Emerald;
|
|
else if (resourceType == typeof(Sapphire))
|
|
GemType = GemType.Sapphire;
|
|
else if (resourceType == typeof(Ruby))
|
|
GemType = GemType.Ruby;
|
|
else if (resourceType == typeof(Citrine))
|
|
GemType = GemType.Citrine;
|
|
else if (resourceType == typeof(Amethyst))
|
|
GemType = GemType.Amethyst;
|
|
else if (resourceType == typeof(Tourmaline))
|
|
GemType = GemType.Tourmaline;
|
|
else if (resourceType == typeof(Amber))
|
|
GemType = GemType.Amber;
|
|
else if (resourceType == typeof(Diamond))
|
|
GemType = GemType.Diamond;
|
|
}
|
|
|
|
#region Mondain's Legacy
|
|
m_Quality = (ItemQuality)quality;
|
|
|
|
if (makersMark)
|
|
m_Crafter = from;
|
|
#endregion
|
|
|
|
return 1;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Mondain's Legacy Sets
|
|
public override bool OnDragLift(Mobile from)
|
|
{
|
|
if (Parent is Mobile && from == Parent)
|
|
{
|
|
if (IsSetItem && m_SetEquipped)
|
|
SetHelper.RemoveSetBonus(from, SetID, this);
|
|
}
|
|
|
|
return base.OnDragLift(from);
|
|
}
|
|
|
|
public virtual SetItem SetID
|
|
{
|
|
get
|
|
{
|
|
return SetItem.None;
|
|
}
|
|
}
|
|
public virtual int Pieces
|
|
{
|
|
get
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public virtual bool BardMasteryBonus
|
|
{
|
|
get
|
|
{
|
|
return (SetID == SetItem.Virtuoso);
|
|
}
|
|
}
|
|
|
|
public virtual bool MixedSet
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool IsSetItem
|
|
{
|
|
get
|
|
{
|
|
return SetID == SetItem.None ? false : true;
|
|
}
|
|
}
|
|
|
|
private int m_SetHue;
|
|
private bool m_SetEquipped;
|
|
private bool m_LastEquipped;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetHue
|
|
{
|
|
get
|
|
{
|
|
return m_SetHue;
|
|
}
|
|
set
|
|
{
|
|
m_SetHue = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
public bool SetEquipped
|
|
{
|
|
get
|
|
{
|
|
return m_SetEquipped;
|
|
}
|
|
set
|
|
{
|
|
m_SetEquipped = value;
|
|
}
|
|
}
|
|
|
|
public bool LastEquipped
|
|
{
|
|
get
|
|
{
|
|
return m_LastEquipped;
|
|
}
|
|
set
|
|
{
|
|
m_LastEquipped = value;
|
|
}
|
|
}
|
|
|
|
private int m_SetPhysicalBonus, m_SetFireBonus, m_SetColdBonus, m_SetPoisonBonus, m_SetEnergyBonus;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetPhysicalBonus
|
|
{
|
|
get
|
|
{
|
|
return m_SetPhysicalBonus;
|
|
}
|
|
set
|
|
{
|
|
m_SetPhysicalBonus = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetFireBonus
|
|
{
|
|
get
|
|
{
|
|
return m_SetFireBonus;
|
|
}
|
|
set
|
|
{
|
|
m_SetFireBonus = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetColdBonus
|
|
{
|
|
get
|
|
{
|
|
return m_SetColdBonus;
|
|
}
|
|
set
|
|
{
|
|
m_SetColdBonus = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetPoisonBonus
|
|
{
|
|
get
|
|
{
|
|
return m_SetPoisonBonus;
|
|
}
|
|
set
|
|
{
|
|
m_SetPoisonBonus = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public int SetEnergyBonus
|
|
{
|
|
get
|
|
{
|
|
return m_SetEnergyBonus;
|
|
}
|
|
set
|
|
{
|
|
m_SetEnergyBonus = value;
|
|
InvalidateProperties();
|
|
}
|
|
}
|
|
|
|
private AosAttributes m_SetAttributes;
|
|
private AosSkillBonuses m_SetSkillBonuses;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public AosAttributes SetAttributes
|
|
{
|
|
get
|
|
{
|
|
return m_SetAttributes;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public AosSkillBonuses SetSkillBonuses
|
|
{
|
|
get
|
|
{
|
|
return m_SetSkillBonuses;
|
|
}
|
|
set
|
|
{
|
|
}
|
|
}
|
|
|
|
public int SetResistBonus(ResistanceType resist)
|
|
{
|
|
switch (resist)
|
|
{
|
|
case ResistanceType.Physical: return PhysicalResistance;
|
|
case ResistanceType.Fire: return FireResistance;
|
|
case ResistanceType.Cold: return ColdResistance;
|
|
case ResistanceType.Poison: return PoisonResistance;
|
|
case ResistanceType.Energy: return EnergyResistance;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|