//public void HookBase(HookPoint hookPoint, HookOrder order, NLua.LuaFunction callback)
        //{

        //    if (initialized)
        //        hookPoint.HookBase(this, new HookAction<Object>((ref HookContext ctx, ref Object args) =>
        //        {
        //            callback.Call(ctx, args);
        //        }));
        //    else
        //    {
        //        lock (desiredHooks)
        //            desiredHooks.Add(new HookEntry
        //            {
        //                hookPoint = hookPoint,
        //                callback = new HookAction<Object>((ref HookContext ctx, ref Object args) =>
        //                {
        //                    callback.Call(ctx, args);
        //                }),
        //                order = order
        //            });
        //    }
        //}

        public void Unhook(HookPoint hookPoint)
        {
            if (initialized)
            {
                hookPoint.Unhook(this);
            }
            else
            {
                lock (desiredHooks)
                {
                    int i = 0;
                    foreach (var h in desiredHooks)
                    {
                        if (h.hookPoint == hookPoint)
                        {
                            desiredHooks.RemoveAt(i);
                            break;
                        }
                        i++;
                    }
                }
            }
        }