224 lines
4.6 KiB
C#
224 lines
4.6 KiB
C#
/***************************************************************************
|
|
* Attributes.cs
|
|
* -------------------
|
|
* begin : May 1, 2002
|
|
* copyright : (C) The RunUO Software Team
|
|
* email : info@runuo.com
|
|
*
|
|
* $Id$
|
|
*
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
***************************************************************************/
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
|
|
namespace Server
|
|
{
|
|
[AttributeUsage( AttributeTargets.Property )]
|
|
public class HueAttribute : Attribute
|
|
{
|
|
public HueAttribute()
|
|
{
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Property )]
|
|
public class BodyAttribute : Attribute
|
|
{
|
|
public BodyAttribute()
|
|
{
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )]
|
|
public class PropertyObjectAttribute : Attribute
|
|
{
|
|
public PropertyObjectAttribute()
|
|
{
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )]
|
|
public class NoSortAttribute : Attribute
|
|
{
|
|
public NoSortAttribute()
|
|
{
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Method )]
|
|
public class CallPriorityAttribute : Attribute
|
|
{
|
|
private int m_Priority;
|
|
|
|
public int Priority
|
|
{
|
|
get{ return m_Priority; }
|
|
set{ m_Priority = value; }
|
|
}
|
|
|
|
public CallPriorityAttribute( int priority )
|
|
{
|
|
m_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;
|
|
|
|
return GetPriority( x ) - GetPriority( y );
|
|
}
|
|
|
|
private int GetPriority( MethodInfo mi )
|
|
{
|
|
object[] 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 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
|
|
{
|
|
public ParsableAttribute()
|
|
{
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum )]
|
|
public class CustomEnumAttribute : Attribute
|
|
{
|
|
private string[] m_Names;
|
|
|
|
public string[] Names
|
|
{
|
|
get
|
|
{
|
|
return m_Names;
|
|
}
|
|
}
|
|
|
|
public CustomEnumAttribute( string[] names )
|
|
{
|
|
m_Names = names;
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Constructor )]
|
|
public class ConstructableAttribute : Attribute
|
|
{
|
|
private AccessLevel m_AccessLevel;
|
|
|
|
public AccessLevel AccessLevel
|
|
{
|
|
get { return m_AccessLevel; }
|
|
set { m_AccessLevel = value; }
|
|
}
|
|
|
|
public ConstructableAttribute() : this( AccessLevel.Player ) //Lowest accesslevel for current functionality (Level determined by access to [add)
|
|
{
|
|
}
|
|
|
|
public ConstructableAttribute( AccessLevel accessLevel )
|
|
{
|
|
m_AccessLevel = accessLevel;
|
|
}
|
|
}
|
|
|
|
[AttributeUsage( AttributeTargets.Property )]
|
|
public class CommandPropertyAttribute : Attribute
|
|
{
|
|
private AccessLevel m_ReadLevel, m_WriteLevel;
|
|
private 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;
|
|
}
|
|
}
|
|
}
|