/// <summary> /// User purchased currency, we are saving it here. But it is not yet complete. /// </summary> /// <param name="purchaseID"></param> /// <param name="principalID"></param> /// <param name="userName"></param> /// <param name="amount"></param> /// <param name="conversionFactor"></param> /// <param name="region"></param> /// <param name="puchaseType"> </param> /// <returns></returns> public bool UserCurrencyBuy(UUID purchaseID, UUID principalID, string userName, uint amount, float conversionFactor, RegionTransactionDetails region, int puchaseType) { List <object> values = new List <object> { purchaseID.ToString(), // PurchaseID puchaseType, // PurchaseType principalID.ToString(), // PrincipalID userName, // PrincipalID amount, // Amount Convert.ToInt32(Math.Round(((float.Parse(amount.ToString()) / m_options.RealCurrencyConversionFactor) + ((float.Parse(amount.ToString()) / m_options.RealCurrencyConversionFactor) * (m_options.AdditionPercentage / 10000.0)) + (m_options.AdditionAmount / 100.0)) * 100)), Convert.ToInt32(conversionFactor), // ConversionFactor region.RegionName, // RegionName region.RegionID.ToString(), // RegionID region.RegionPosition, // RegionPos 0, // Complete "", // CompleteMethod "", // CompleteReference "", // TransactionID Utils.GetUnixTime(), // Created Utils.GetUnixTime(), // Updated "", // pyapal raw data "" //notes }; m_gd.Insert("stardust_purchased", values.ToArray()); return(true); }
/// <summary> /// This is the function that everythign really happens Grid and Region Side. We build the transaction here. /// </summary> /// <param name="toID"></param> /// <param name="fromID"></param> /// <param name="toObjectID"></param> /// <param name="fromObjectID"></param> /// <param name="amount"></param> /// <param name="description"></param> /// <param name="type"></param> /// <param name="transactionID"></param> /// <returns></returns> public virtual bool UserCurrencyTransfer(UUID toID, UUID fromID, UUID toObjectID, UUID fromObjectID, uint amount, string description, TransactionType type, UUID transactionID) { bool isgridServer = false; #region Build the transaction string transactionPosition = ""; IScene scene = null; string fromObjectName = ""; string toObjectName = ""; if ((fromObjectID != UUID.Zero) && (StarDustRegionService != null)) { ISceneChildEntity ce = StarDustRegionService.FindObject(fromObjectID, out scene); if (ce != null) { fromObjectName = ce.Name; transactionPosition = ce.AbsolutePosition.ToString(); } } if ((toObjectID != UUID.Zero) && (StarDustRegionService != null)) { ISceneChildEntity ce = StarDustRegionService.FindObject(toObjectID, out scene); if (ce != null) { toObjectName = ce.Name; transactionPosition = ce.AbsolutePosition.ToString(); } } if (transactionPosition.Length == 0) { transactionPosition = scene.GetScenePresence(fromID).AbsolutePosition.ToString(); } if (transactionPosition.Length == 0) { transactionPosition = scene.GetScenePresence(toID).AbsolutePosition.ToString(); } if (transactionPosition.Length == 0) { transactionPosition = "Unknown"; } RegionTransactionDetails r = new RegionTransactionDetails(); ulong regionHandel = 0; if (scene != null) { r = new RegionTransactionDetails { RegionID = scene.RegionInfo.RegionID, RegionName = scene.RegionInfo.RegionName, RegionPosition = transactionPosition }; } else if (m_registry != null) { ICapsService capsService = m_registry.RequestModuleInterface <ICapsService>(); if (capsService != null) { IClientCapsService client = capsService.GetClientCapsService(fromID); if (client != null) { IRegionClientCapsService regionClient = client.GetRootCapsService(); if (regionClient != null) { regionHandel = regionClient.Region.RegionHandle; r.RegionName = regionClient.Region.RegionName; r.RegionPosition = "<128,128,128>"; r.RegionID = regionClient.Region.RegionID; isgridServer = true; } } } } else { return(false); } string fromName = ""; if (fromID != UUID.Zero) { if (StarDustRegionService != null) { IClientAPI icapiFrom = StarDustRegionService.GetUserClient(fromID); if (icapiFrom != null) { fromName = icapiFrom.Name; } } if (fromName == "") { UserAccount ua = GetUserAccount(fromID); if (ua != null) { fromName = ua.Name; } } if (fromName == "") { if (StarDustRegionService != null) { ISceneChildEntity ce = StarDustRegionService.FindObject(fromID, out scene); if (ce != null) { fromObjectID = fromID; fromID = ce.OwnerID; UserAccount ua2 = GetUserAccount(fromID); if (ua2 != null) { fromName = ua2.Name; } else { fromID = UUID.Zero; } fromObjectName = ce.Name; } else { fromID = UUID.Zero; } } else { fromID = UUID.Zero; } } } if (fromID == UUID.Zero) { MainConsole.Instance.Debug("[StarDust MoneyModule.cs] Could not find who the money was coming from."); return(false); } string toName = ""; if (toID != UUID.Zero) { if (StarDustRegionService != null) { IClientAPI icapiFrom = StarDustRegionService.GetUserClient(toID); if (icapiFrom != null) { toName = icapiFrom.Name; } } if (toName == "") { UserAccount ua = GetUserAccount(toID); if (ua != null) { toName = ua.Name; } } if (toName == "") { if (StarDustRegionService != null) { ISceneChildEntity ce = StarDustRegionService.FindObject(toID, out scene); if (ce != null) { toObjectID = toID; toID = ce.OwnerID; UserAccount ua3 = GetUserAccount(toID); if (ua3 != null) { toName = ua3.Name; } toObjectName = ce.Name; } else { toName = "Group"; } } else { toName = "Group"; } } } else { toID = m_options.BankerPrincipalID; } //this ensure no matter what theres a place for the money to go UserCurrencyInfo(toID); if ((description == "") && ((int)type == 5001) && (fromObjectID == UUID.Zero) && (toObjectID == UUID.Zero)) { description = "Gift"; } if (description == "") { description = Enum.GetName(typeof(TransactionType), type); } if (description == "") { description = type.ToString(); } #endregion #region Perform transaction Transaction transaction = UserCurrencyTransfer(new Transaction { TransactionID = transactionID, Amount = amount, Description = description, FromID = fromID, FromName = fromName, FromObjectID = fromObjectID, FromObjectName = fromObjectName, Region = r, ToID = toID, ToName = toName, ToObjectID = toObjectID, ToObjectName = toObjectName, TypeOfTrans = type }); bool returnvalue = transaction.Complete == 1; if (returnvalue) { m_moneyModule.FireObjectPaid(toObjectID, fromID, (int)amount); } #endregion #region notifications if (transaction.Complete == 1) { if (transaction.ToID != m_options.BankerPrincipalID) { if (transaction.TypeOfTrans == TransactionType.Gift) { SendGridMessage(transaction.FromID, "You Paid " + transaction.ToName + " $" + transaction.Amount.ToString(), !isgridServer, transaction.TransactionID); } else { SendGridMessage(transaction.FromID, "You Paid $" + transaction.Amount + " to " + transaction.ToName, !isgridServer, transaction.TransactionID); } SendGridMessage(transaction.ToID, "You Were Paid $" + transaction.Amount + " by " + transaction.FromName, !isgridServer, transaction.TransactionID); } else if (transaction.TypeOfTrans == TransactionType.UploadCharge) { SendGridMessage(transaction.FromID, "You Paid $" + transaction.Amount + " to upload", !isgridServer, transaction.TransactionID); } else { SendGridMessage(transaction.FromID, "You Paid $" + transaction.Amount, !isgridServer, transaction.TransactionID); } } else { if (transaction.CompleteReason != "") { SendGridMessage(transaction.FromID, "Transaction Failed - " + transaction.CompleteReason, !isgridServer, transaction.TransactionID); } else { SendGridMessage(transaction.FromID, "Transaction Failed", !isgridServer, transaction.TransactionID); } } if ((toObjectID != UUID.Zero) && (!isgridServer)) { m_moneyModule.FireObjectPaid(toObjectID, fromID, (int)amount); } #endregion return(returnvalue); }