servuo/Server/Attributes.cs
VitaNex 7851c5e88c + Removed most file header regions.
+ Add MONO to Makefile compile definitions.
+ Update Ultima SDK to support MONO compile definition.
+ Rename Properties Gump parent directory to prevent VS issues.
+ Console error messages will now use red instead of dark red font.
+ Add crash state handler function to Core.
+ AI optimizations and housekeeping.
+ Context Menu optimizations and housekeeping.
+ Add ability to drop throttled packets.
+ Add string parsing support to Rectangle3D.
+ Optimize guild messages and chat.
+ IAddon implements IChopable.
+ Add more flexibility for altering Mobile names.
+ Add ability to enable or disable OPL for individual mobiles.
+ Optimize damaging regions and ensure timers are removed properly.
+ Update Welcome Timer with more intuitive message groups.
+ Normalize all virtue related objects to the Server.Services.Virtues namespace.
+ Add ability for ISpawner to append OPL and Context Menus to their spawn.
+ Add EventSink events for obtaining items, equipping items, context menus, and world broadcasts.
+ Add ability to lock a creature's direction and movement regardless of AI manipulation.
+ Add ability to dynamically change a creature's approach range and wait state.
+ Add extended enumeration features for AOS attributes.
+ Add ability to control whether creatures have blood, and its color.
+ Expose corpse flag manipulation methods.
+ Add ability to prevent criminal action when looting a corpse.
+ Corpse will now be permanently tagged as murderer at time of death if owner is a murderer.
+ Add TextDefinition support for Commodity Deed descriptions.
+ House add-on and component optimizations and housekeeping.
+ Item light is no longer backed by the direction property.
+ ITool implements IEntity.
+ Prevent trading of Siege Bless items.
+ Guards are naturally be immune to guards.
+ Siege Shard initialization housekeeping.
+ Character Creation housekeeping.
+ Generic commands housekeeping.
+ Add Mark command for staff.
2018-07-19 22:12:52 +01:00

206 lines
No EOL
4.4 KiB
C#

#region References
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
#endregion
namespace Server
{
[AttributeUsage(AttributeTargets.Property)]
public class HueAttribute : Attribute
{ }
[AttributeUsage(AttributeTargets.Property)]
public class BodyAttribute : Attribute
{ }
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface)]
public class PropertyObjectAttribute : Attribute
{ }
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class NoSortAttribute : Attribute
{ }
[AttributeUsage(AttributeTargets.Method)]
public class CallPriorityAttribute : Attribute
{
public int Priority { get; set; }
public CallPriorityAttribute(int priority)
{
Priority = priority;
}
}
public class CallPriorityComparer : IComparer<MethodInfo>
{
public int Compare(MethodInfo x, MethodInfo y)
{
if (x == null && y == null)
{
return 0;
}
if (x == null)
{
return 1;
}
if (y == null)
{
return -1;
}
var xPriority = GetPriority(x);
var yPriority = GetPriority(y);
if (xPriority > yPriority)
return 1;
if (xPriority < yPriority)
return -1;
return 0;
}
private int GetPriority(MethodInfo mi)
{
var objs = mi.GetCustomAttributes(typeof(CallPriorityAttribute), true);
if (objs == null)
{
return 0;
}
if (objs.Length == 0)
{
return 0;
}
CallPriorityAttribute attr = objs[0] as CallPriorityAttribute;
if (attr == null)
{
return 0;
}
return attr.Priority;
}
}
[AttributeUsage(AttributeTargets.Class)]
public class TypeAliasAttribute : Attribute
{
private readonly string[] m_Aliases;
public string[] Aliases { get { return m_Aliases; } }
public TypeAliasAttribute(params string[] aliases)
{
m_Aliases = aliases;
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class ParsableAttribute : Attribute
{ }
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum)]
public class CustomEnumAttribute : Attribute
{
private readonly string[] m_Names;
public string[] Names { get { return m_Names; } }
public CustomEnumAttribute(string[] names)
{
m_Names = names;
}
}
[AttributeUsage(AttributeTargets.Class)]
public class DeleteConfirmAttribute : Attribute
{
public string Message { get; set; }
public DeleteConfirmAttribute()
: this("Are you sure you wish to delete this item?")
{ }
public DeleteConfirmAttribute(string message)
{
Message = message;
}
public static bool Find<T>(out string message) where T : class
{
return Find(typeof(T), out message);
}
public static bool Find(object o, out string message)
{
return Find(o.GetType(), out message);
}
public static bool Find(Type t, out string message)
{
var attrs = t.GetCustomAttributes(typeof(DeleteConfirmAttribute), true);
if (attrs.Length > 0)
{
message = String.Join("\n", attrs.OfType<DeleteConfirmAttribute>().Select(a => a.Message));
return true;
}
message = String.Empty;
return false;
}
}
[AttributeUsage(AttributeTargets.Constructor)]
public class ConstructableAttribute : Attribute
{
public AccessLevel AccessLevel { get; set; }
public ConstructableAttribute()
: this(AccessLevel.Player) //Lowest accesslevel for current functionality (Level determined by access to [add)
{ }
public ConstructableAttribute(AccessLevel accessLevel)
{
AccessLevel = accessLevel;
}
}
[AttributeUsage(AttributeTargets.Property)]
public class CommandPropertyAttribute : Attribute
{
private readonly AccessLevel m_ReadLevel;
private readonly AccessLevel m_WriteLevel;
private readonly bool m_ReadOnly;
public AccessLevel ReadLevel { get { return m_ReadLevel; } }
public AccessLevel WriteLevel { get { return m_WriteLevel; } }
public bool ReadOnly { get { return m_ReadOnly; } }
public CommandPropertyAttribute(AccessLevel level, bool readOnly)
{
m_ReadLevel = level;
m_ReadOnly = readOnly;
}
public CommandPropertyAttribute(AccessLevel level)
: this(level, level)
{ }
public CommandPropertyAttribute(AccessLevel readLevel, AccessLevel writeLevel)
{
m_ReadLevel = readLevel;
m_WriteLevel = writeLevel;
}
}
}