public bool UserCurrencyUpdate(StarDustUserCurrency agent)
 {
     if (m_doRemoteCalls)
     {
         return((bool)DoRemote(agent));
     }
     return(m_database.UserCurrencyUpdate(agent));
 }
        private object RestrictedCurrencyPurchaseRemove_Event(string functionName, object parameters)
        {
            RestrictedCurrencyInfo pcri = new RestrictedCurrencyInfo();

            pcri.FromOSD((OSDMap)OSDParser.DeserializeJson(parameters.ToString()));
            StarDustUserCurrency starDustUserCurrency = UserCurrencyInfo(pcri.AgentID);

            starDustUserCurrency.RestrictPurchaseAmount -= pcri.Amount;
            m_database.UserCurrencyUpdate(starDustUserCurrency);
            return(true);
        }
        public XmlRpcResponse QuoteFunc(XmlRpcRequest request, IPEndPoint ep)
        {
            Hashtable requestData = (Hashtable)request.Params[0];

            XmlRpcResponse returnval = new XmlRpcResponse();

            if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy"))
            {
                uint amount   = uint.Parse(requestData["currencyBuy"].ToString());
                UUID theagent = new UUID(requestData["agentId"].ToString());
                StarDustUserCurrency currency = m_dustCurrencyService.UserCurrencyInfo(theagent);
                bool successful = !(m_dustCurrencyService.m_options.MaxAmountPurchase < currency.RestrictPurchaseAmount + amount);
                if (!successful)
                {
                    m_dustCurrencyService.SendGridMessage(theagent, string.Format("Amount was over the limit. {0} is the max amount.", m_dustCurrencyService.m_options.MaxAmountPurchase - currency.RestrictPurchaseAmount), false, UUID.Zero);
                }
                returnval.Value = new Hashtable
                {
                    { "success", successful },
                    {
                        "currency",
                        new Hashtable
                        {
                            {
                                "estimatedCost",
                                Convert.ToInt32(
                                    Math.Round(((float.Parse(amount.ToString()) /
                                                 m_dustCurrencyService.m_options.
                                                 RealCurrencyConversionFactor) +
                                                ((float.Parse(amount.ToString()) /
                                                  m_dustCurrencyService.m_options.
                                                  RealCurrencyConversionFactor) *
                                                 (m_dustCurrencyService.m_options.
                                                  AdditionPercentage / 10000.0)) +
                                                (m_dustCurrencyService.m_options.
                                                 AdditionAmount / 100.0)) * 100))
                            },
                            { "currencyBuy", (int)amount }
                        }
                    },
                    { "confirm", "asdfad9fj39ma9fj" }
                };


                return(returnval);
            }
            returnval.Value = new Hashtable
            {
                { "success", false },
                { "errorMessage", "Invalid parameters passed to the quote box" },
                { "errorURI", m_dustCurrencyService.m_options.ErrorURI }
            };
            return(returnval);
        }
Exemple #4
0
 public bool UserCurrencyUpdate(StarDustUserCurrency agent)
 {
     m_gd.Update("stardust_currency",
                 new Dictionary <string, object>
     {
         { "LandInUse", agent.LandInUse },
         { "Tier", agent.Tier },
         { "IsGroup", agent.IsGroup },
         { "RestrictedAmount", agent.RestrictedAmount },
         { "RestrictPurchaseAmount", agent.RestrictPurchaseAmount }
     }, null,
                 new QueryFilter()
     {
         andFilters = new Dictionary <string, object> {
             { "PrincipalID", agent.PrincipalID }
         }
     }
                 , null, null);
     return(true);
 }
Exemple #5
0
        public StarDustUserCurrency GetUserCurrency(UUID agentId)
        {
            StarDustUserCurrency starDustUser = new StarDustUserCurrency {
                PrincipalID = agentId, Amount = 0, LandInUse = 0, Tier = 0
            };

            Dictionary <string, object> where = new Dictionary <string, object>(1);
            where["PrincipalID"] = agentId;
            List <string> query = m_gd.Query(new string[] { "*" }, "stardust_currency", new QueryFilter()
            {
                andFilters = where
            }, null, null, null);

            if (query.Count == 0)
            {
                UserCurrencyCreate(agentId);
                return(starDustUser);
            }
            starDustUser.FromArray(query);
            return(starDustUser);
        }
Exemple #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="transaction"></param>
        /// <param name="trans"></param>
        /// <returns></returns>
        private bool UserCurrencyTransaction(Transaction transaction, out Transaction trans)
        {
            // write the history
            if (!WriteHistory(transaction, out transaction))
            {
                trans = transaction;
                return(false);
            }

            // get users currency

            StarDustUserCurrency fromBalance = GetUserCurrency(new UUID(transaction.FromID));

            // Ensure sender has enough money
            if ((!m_options.AllowBankerToHaveNoMoney ||
                 (m_options.AllowBankerToHaveNoMoney && m_options.BankerPrincipalID != transaction.FromID)) &&
                fromBalance.Amount < transaction.Amount)
            {
                transaction.Complete       = 0;
                transaction.CompleteReason = "Send amount is greater than sender has";
                WriteHistory(transaction, out transaction);
                trans = transaction;
                return(false);
            }

            if (transaction.FromID != m_options.BankerPrincipalID)
            {
                if ((fromBalance.RestrictedAmount > 0) && ((fromBalance.Amount - fromBalance.RestrictedAmount) < transaction.Amount))
                {
                    transaction.Complete       = 0;
                    transaction.CompleteReason = "Failed transaction. $" + fromBalance.RestrictedAmount + " of your currency is restricted for " + m_options.RestrictMoneyHoursAfterPurchase + " hours after purchase. You can spend " + (fromBalance.Amount - fromBalance.RestrictedAmount) + ". Sorry";
                    WriteHistory(transaction, out transaction);
                    trans = transaction;
                    return(false);
                }
            }

            // update sender
            m_gd.Update("stardust_currency",
                        (fromBalance.Amount - transaction.Amount) >= fromBalance.StipendsBalance
                            ? new Dictionary <string, object> {
                { "Amount", fromBalance.Amount - transaction.Amount }
            }
                            : new Dictionary <string, object>
            {
                { "Amount", fromBalance.Amount - transaction.Amount },
                {
                    "StipendsBalance",
                    fromBalance.StipendsBalance -
                    (fromBalance.StipendsBalance - (fromBalance.Amount - transaction.Amount))
                }
            }, null,
                        new QueryFilter()
            {
                andFilters = new Dictionary <string, object> {
                    { "PrincipalID", transaction.FromID }
                }
            }, null,
                        null);

            StarDustUserCurrency toBalance = GetUserCurrency(new UUID(transaction.ToID));

            if (transaction.TypeOfTrans == TransactionType.StipendPayment)
            {
                m_gd.Update("stardust_currency",
                            new Dictionary <string, object> {
                    { "Amount", toBalance.Amount + transaction.Amount }, { "StipendsBalance", toBalance.StipendsBalance + transaction.Amount }
                }, null,
                            new QueryFilter()
                {
                    andFilters = new Dictionary <string, object> {
                        { "PrincipalID", transaction.ToID }
                    }
                }, null,
                            null);
            }
            else
            {
                m_gd.Update("stardust_currency",
                            new Dictionary <string, object> {
                    { "Amount", toBalance.Amount + transaction.Amount }
                }, null,
                            new QueryFilter()
                {
                    andFilters = new Dictionary <string, object> {
                        { "PrincipalID", transaction.ToID }
                    }
                }, null,
                            null);
            }

            // update logs
            transaction.Complete       = 1;
            transaction.CompleteReason = "";

            transaction.ToBalance   = toBalance.Amount + transaction.Amount;
            transaction.FromBalance = fromBalance.Amount - transaction.Amount;


            WriteHistory(transaction, out transaction);

            trans = transaction;
            return(true);
        }
        public void RestrictCurrency(StarDustUserCurrency currency, Transaction transaction, UUID agentId)
        {
            if ((m_options.MaxAmountPurchaseDays > 0) && (m_options.MaxAmountPurchase > 0))
            {
                currency.RestrictPurchaseAmount += transaction.Amount;
                Scheduler.Save(new SchedulerItem("RestrictedCurrencyPurchaseRemove",
                                                 OSDParser.SerializeJsonString(new RestrictedCurrencyInfo()
                {
                    AgentID           = agentId,
                    Amount            = transaction.Amount,
                    FromTransactionID = transaction.TransactionID
                }.ToOSD()),
                                                 true, DateTime.UtcNow,
                                                 m_options.MaxAmountPurchaseDays,
                                                 RepeatType.days, agentId)
                {
                    HisotryKeep    = true,
                    HistoryReciept = false,
                    RunOnce        = true
                });
                UserCurrencyUpdate(currency);
            }
            if ((m_options.RestrictMoneyHoursAfterPurchase > 0) && (m_options.RestrictMoneyCanSpendAfterPurchase > 0))
            {
                uint amount2Restrict = 0;
                if (currency.RestrictedAmount == 0)
                {
                    if (transaction.Amount >= m_options.RestrictMoneyCanSpendAfterPurchase)
                    {
                        amount2Restrict = transaction.Amount - (uint)m_options.RestrictMoneyCanSpendAfterPurchase;
                    }
                    else //because its less than the amount we allow them to spend, we restricted it all.. why? because else they could buy over and over with no restrictions
                    {
                        amount2Restrict = transaction.Amount / 2;
                    }
                }
                else // if they already have money restricted we restrict everything
                {
                    amount2Restrict = transaction.Amount;
                }

                currency.RestrictedAmount += amount2Restrict;

                Scheduler.Save(new SchedulerItem("RestrictedCurrencySpendRemove",
                                                 OSDParser.SerializeJsonString(new RestrictedCurrencyInfo()
                {
                    AgentID           = agentId,
                    Amount            = amount2Restrict,
                    FromTransactionID = transaction.TransactionID
                }.ToOSD()),
                                                 true, DateTime.UtcNow,
                                                 m_options.RestrictMoneyHoursAfterPurchase,
                                                 RepeatType.hours, agentId)
                {
                    HisotryKeep    = true,
                    HistoryReciept = false,
                    RunOnce        = true
                });
                UserCurrencyUpdate(currency);
            }
        }
        public UUID StartPurchaseOrATMTransfer(UUID agentId, uint amountBuying, PurchaseType purchaseType, string gridName)
        {
            bool        success = false;
            UserAccount ua      = Registry.RequestModuleInterface <IUserAccountService>().GetUserAccount(null, agentId);

            if (ua == null)
            {
                return(UUID.Zero);
            }
            string agentName = ua.Name;

            UUID   RegionID   = UUID.Zero;
            string RegionName = "";

            if (purchaseType == PurchaseType.InWorldPurchaseOfCurrency)
            {
                IClientCapsService client = Registry.RequestModuleInterface <ICapsService>().GetClientCapsService(agentId);
                if (client != null)
                {
                    IRegionClientCapsService regionClient = client.GetRootCapsService();
                    RegionID   = regionClient.Region.RegionID;
                    RegionName = regionClient.Region.RegionName;
                }
            }
            else if (purchaseType == PurchaseType.ATMTransferFromAnotherGrid)
            {
                RegionName = "Grid:" + gridName;
            }
            else
            {
                RegionName = "Unknown";
            }


            UUID purchaseID = UUID.Random();

            success = m_database.UserCurrencyBuy(purchaseID, agentId, agentName, amountBuying, m_options.RealCurrencyConversionFactor,
                                                 new RegionTransactionDetails
            {
                RegionID   = RegionID,
                RegionName = RegionName
            }, (int)purchaseType);
            StarDustUserCurrency currency = UserCurrencyInfo(agentId);



            if (m_options.AutoApplyCurrency && success)
            {
                Transaction transaction;
                m_database.UserCurrencyBuyComplete(purchaseID, 1, "AutoComplete",
                                                   m_options
                                                   .AutoApplyCurrency.ToString
                                                       (), "Auto Complete",
                                                   out transaction);

                UserCurrencyTransfer(transaction.ToID,
                                     m_options.
                                     BankerPrincipalID, UUID.Zero, UUID.Zero,
                                     transaction.Amount, "Currency Purchase",
                                     TransactionType.SystemGenerated,
                                     transaction.TransactionID);
                RestrictCurrency(currency, transaction, agentId);
            }
            else if (success && (m_options.AfterCurrencyPurchaseMessage != string.Empty) && (purchaseType == PurchaseType.InWorldPurchaseOfCurrency))
            {
                SendGridMessage(agentId, String.Format(m_options.AfterCurrencyPurchaseMessage, purchaseID.ToString()), false, UUID.Zero);
            }

            if (success)
            {
                return(purchaseID);
            }
            return(UUID.Zero);
        }
        public XmlRpcResponse PreflightBuyLandPrepFunc(XmlRpcRequest request, IPEndPoint ep)
        {
            Hashtable      requestData = (Hashtable)request.Params[0];
            XmlRpcResponse ret         = new XmlRpcResponse();
            Hashtable      retparam    = new Hashtable();

            Hashtable membershiplevels = new Hashtable();

            membershiplevels.Add("levels", membershiplevels);

            Hashtable landuse = new Hashtable();

            Hashtable level = new Hashtable
            {
                { "id", "00000000-0000-0000-0000-000000000000" },
                { m_dustCurrencyService.m_options.UpgradeMembershipUri, "Premium Membership" }
            };

            if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy"))
            {
                UUID agentId;
                UUID.TryParse((string)requestData["agentId"], out agentId);
                StarDustUserCurrency currency = m_dustCurrencyService.UserCurrencyInfo(agentId);
                IUserProfileInfo     profile  = DataManager.RequestPlugin <IProfileConnector>("IProfileConnector").GetUserProfile(agentId);


                IClientCapsService client    = m_dustCurrencyService.Registry.RequestModuleInterface <ICapsService>().GetClientCapsService(agentId);
                OSDMap             replyData = m_dustCurrencyService.GetParcelDetails(agentId);
                if (replyData == null)
                {
                    landuse.Add("action", false);

                    retparam.Add("success", false);
                    retparam.Add("currency", currency);
                    retparam.Add("membership", level);
                    retparam.Add("landuse", landuse);
                    retparam.Add("confirm", "asdfajsdkfjasdkfjalsdfjasdf");
                    ret.Value = retparam;
                }
                else
                {
                    if (client != null)
                    {
                        m_dustCurrencyService.SendGridMessage(agentId, String.Format(m_dustCurrencyService.m_options.MessgeBeforeBuyLand, profile.DisplayName, replyData.ContainsKey("SalePrice")), false, UUID.Zero);
                    }
                    if (replyData.ContainsKey("SalePrice"))
                    {
                        // I think, this might be usable if they don't have the money
                        // Hashtable currencytable = new Hashtable { { "estimatedCost", replyData["SalePrice"].AsInteger() } };

                        int  landTierNeeded = (int)(currency.LandInUse + replyData["Area"].AsInteger());
                        bool needsUpgrade   = false;
                        switch (profile.MembershipGroup)
                        {
                        case "Premium":
                        case "":
                            needsUpgrade = landTierNeeded >= currency.Tier;
                            break;

                        case "Banned":
                            needsUpgrade = true;
                            break;
                        }
                        // landuse.Add("action", m_DustCurrencyService.m_options.upgradeMembershipUri);
                        landuse.Add("action", needsUpgrade);

                        retparam.Add("success", true);
                        retparam.Add("currency", currency);
                        retparam.Add("membership", level);
                        retparam.Add("landuse", landuse);
                        retparam.Add("confirm", "asdfajsdkfjasdkfjalsdfjasdf");
                        ret.Value = retparam;
                    }
                }
            }

            return(ret);
        }