mirror of
https://github.com/ServUO/ServUO
synced 2026-08-11 20:23:04 -04:00
+ 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.
206 lines
No EOL
4.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |