public void DeliverMembership(int UserId, int Type, int Months)
        {
            Membership Membership;
            DateTime Activated = DateTime.Now;

            // User has already a Membership
            if (MemberShips.ContainsKey(UserId))
            {
                Membership = MemberShips[UserId];

                if (Membership.MemberScale == Type)
                {
                    Membership.MonthAmount += Months;

                    using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                    {
                        Reactor.SetQuery("UPDATE user_memberships SET month_amount = month_amount + @months, member_scaler = @type WHERE user_id = @userid LIMIT 1");
                        Reactor.AddParam("userid", UserId);
                        Reactor.AddParam("months", Months);
                        Reactor.AddParam("type", Type);
                        Reactor.ExcuteQuery();
                    }
                }
                else
                {
                    Membership.ActivatedTime = Activated;
                    Membership.MonthAmount = Months;

                    using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                    {
                        Reactor.SetQuery("UPDATE user_memberships SET activated_datetime = @activated, month_amount = @months, member_scaler = @type WHERE user_id = @userid LIMIT 1");
                        Reactor.AddParam("userid", UserId);
                        Reactor.AddParam("activated", Activated);
                        Reactor.AddParam("months", Months);
                        Reactor.AddParam("type", Type);
                        Reactor.ExcuteQuery();
                    }
                }

                Membership.MemberScale = Type;
            }
            else
            {
                var Dic = new Dictionary<int, Object>();

                Security.SecurityCounter Counter = new Security.SecurityCounter(-1);

                Dic[Counter.Next] = -1;
                Dic[Counter.Next] = UserId;
                Dic[Counter.Next] = Activated;
                Dic[Counter.Next] = Months;
                Dic[Counter.Next] = 0;
                Dic[Counter.Next] = 0;
                Dic[Counter.Next] = Type;
                Dic[Counter.Next] = 0;

                Membership = new Membership(Dic);
                MemberShips.Add(UserId, Membership);

                using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
                {
                    Reactor.SetQuery("INSERT INTO user_memberships (user_id, activated_datetime, month_amount, member_scaler) VALUES (@userid, @activated, @months, @type)");
                    Reactor.AddParam("userid", UserId);
                    Reactor.AddParam("activated", Activated);
                    Reactor.AddParam("months", Months);
                    Reactor.AddParam("type", Type);
                    Reactor.ExcuteQuery();
                }
            }
        }
        public void LoadMemberShips()
        {
            MemberShips = new Dictionary<int, Membership>();

            DataTable Table = null;

            using (QueryReactor Reactor = BrickEngine.GetQueryReactor())
            {
                Reactor.SetQuery("SELECT * FROM user_memberships");
                Table = Reactor.GetTable();
            }

            if (Table != null)
            {
                foreach (DataRow Row in Table.Rows)
                {
                    Membership Membership = new Membership(Row);

                    if (!MemberShips.ContainsKey(Membership.UserId))
                    {
                        MemberShips.Add(Membership.UserId, Membership);
                    }
                }
            }

            BrickEngine.GetScreenWriter().ScretchLine("[" + MemberShips.Count + "] Membership(s) cached.", IO.WriteType.Outgoing);
        }