public List <Objects.Coupon> UpdateCouponList(Objects.Coupon Coupon)
 {
     if (!CouponList.Contains(Coupon))
     {
         CouponList.Add(Coupon);
     }
     return(CouponList);
 }
        public bool Load()
        {
            try
            {
                MySqlCommand    cmd    = new MySqlCommand("SELECT id, code, uses, dinarreward FROM coupons", Databases.Game.connection);
                MySqlDataReader Reader = cmd.ExecuteReader();

                if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
                        byte   _index       = Reader.GetByte("id");
                        string _code        = Reader.GetString("code");
                        byte   _uses        = Reader.GetByte("uses");
                        uint   _dinarReward = Reader.GetUInt32("dinarreward");

                        Objects.Coupon Coupon = new Objects.Coupon(_index, _code, _uses, _dinarReward);
                        UpdateCouponList(Coupon);
                    }
                }

                Reader.Close();

                if (CouponList.Count > 0)
                {
                    byte _activeCoupons = 0;
                    foreach (var Coupon in CouponList)
                    {
                        if (Coupon.Uses > 0)
                        {
                            _activeCoupons++;
                        }
                    }
                    Log.Instance.WriteLine("Coupon manager found " + _activeCoupons.ToString() + " useable coupons");
                }
                else
                {
                    Log.Instance.WriteError("Coupon list is empty");
                }

                return(true);
            }
            catch { }
            return(false);
        }
        protected override void Process(Entities.User u)
        {
            if (u.Authorized)
            {
                string _inputCode = GetString(0);
                //let´s check if any coupon matches the input
                if (Managers.CouponManager.Instance.isValidCouponCode(_inputCode))
                {
                    Objects.Coupon Coupon = Managers.CouponManager.Instance.getCoupon(_inputCode);

                    if (Coupon.Uses > 0)
                    {
                        u.Money += Coupon.DinarReward;

                        byte _usesLeft = Coupon.Uses;
                        _usesLeft--;

                        Managers.CouponManager.Instance.UpdateCouponUses(Coupon.Index, _usesLeft);

                        Databases.Game.AsyncQuery("UPDATE coupons SET uses=" + _usesLeft + "  WHERE id=" + Coupon.Index + "; UPDATE user_details SET money=" + u.Money + " WHERE id=" + u.ID + ";");
                        ServerLogger.Instance.Append(String.Concat("Player ", u.Displayname, " used coupon ", _inputCode));
                        u.Send(new Packets.Coupon(0, u.Money));
                    }
                    else //already registered :(
                    {
                        u.Send(new Packets.Coupon(-1, 0));
                    }
                }
                else
                {//throw here invalid code
                }
            }
            else
            {
                u.Disconnect();
            }
        }