bool EventManager_OnValidateBuyLand(EventManager.LandBuyArgs e)
        {
            IParcelManagementModule parcelManagement = GetSceneFor(e.agentId).RequestModuleInterface <IParcelManagementModule>();

            if (parcelManagement == null)
            {
                return(false);
            }
            ILandObject lob = parcelManagement.GetLandObject(e.parcelLocalID);

            if (lob != null)
            {
                UUID AuthorizedID = lob.LandData.AuthBuyerID;
                int  saleprice    = lob.LandData.SalePrice;
                UUID pOwnerID     = lob.LandData.OwnerID;

                bool landforsale = ((lob.LandData.Flags & (uint)(ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects)) != 0);
                if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice &&
                    landforsale)
                {
                    if (m_connector.UserCurrencyTransfer(lob.LandData.OwnerID, e.agentId, (uint)saleprice, "Land Buy", TransactionType.LandSale, UUID.Zero))
                    {
                        e.parcelOwnerID = pOwnerID;
                        e.landValidated = true;
                        return(true);
                    }

                    // not validated
                    e.landValidated = false;
                }
            }
            return(false);
        }
예제 #2
0
        private void OnLandBuy(Object osender, EventManager.LandBuyArgs e)
        {
            Scene s = SceneHandler.Instance.LocateSceneClientIn(e.agentId);

            if (e.economyValidated == false)
            {
                if (e.parcelPrice == 0)
                {
                    e.economyValidated = true;
                    s.EventManager.TriggerLandBuy(osender, e);
                }
                else
                {
                    ILandObject parcel = s.LandChannel.GetLandObject(e.parcelLocalID);

                    Dictionary <string, string> additionalParameters = new Dictionary <string, string>();
                    additionalParameters.Add("final", e.final == true ? "1" : "0");
                    additionalParameters.Add("removeContribution", e.removeContribution == true ? "1" : "0");
                    additionalParameters.Add("parcelLocalID", e.parcelLocalID.ToString());
                    additionalParameters.Add("parcelName", parcel.LandData.Name);
                    additionalParameters.Add("transactionID", e.transactionID.ToString());
                    additionalParameters.Add("amountDebited", e.amountDebited.ToString());
                    additionalParameters.Add("authenticated", e.authenticated == true ? "1" : "0");

                    DoMoneyTransfer(e.agentId, e.parcelOwnerID, e.parcelPrice, (int)TransactionType.BUY_LAND, additionalParameters);
                }
            }
        }
예제 #3
0
        private Hashtable landBuy(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();

            try
            {
                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "buyLand");
                d.Add("id", (string)requestData["id"]);
                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

                UUID agentID            = UUID.Parse((string)response["senderUUID"]);
                int  parcelLocalID      = int.Parse((string)response["parcelLocalID"]);
                int  transactionID      = int.Parse((string)response["transactionID"]);
                int  amountDebited      = int.Parse((string)response["amountDebited"]);
                bool final              = (string)response["final"] == "1" ? true : false;
                bool authenticated      = (string)response["authenticated"] == "1" ? true : false;
                bool removeContribution = (string)response["removeContribution"] == "1" ? true : false;

                UUID        regionUUID = UUID.Parse(response["regionUUID"]);
                Scene       s          = SceneHandler.Instance.GetSceneByUUID(regionUUID);
                ILandObject parcel     = s.LandChannel.GetLandObject(parcelLocalID);

                UUID groupID         = parcel.LandData.GroupID;
                int  parcelArea      = parcel.LandData.Area;
                int  parcelPrice     = parcel.LandData.SalePrice;
                bool groupOwned      = parcel.LandData.IsGroupOwned;
                UUID parcelOwnerUUID = parcel.LandData.OwnerID;

                EventManager.LandBuyArgs landbuyArguments =
                    new EventManager.LandBuyArgs(agentID, groupID, final, groupOwned, removeContribution,
                                                 parcelLocalID, parcelArea, parcelPrice, authenticated);

                IClientAPI sender = SceneHandler.Instance.LocateClientObject(agentID);
                if (sender == null)
                {
                    throw new Exception("Avatar " + agentID.ToString() + " does not reside in this region");
                }

                landbuyArguments.amountDebited = amountDebited;
                landbuyArguments.parcelOwnerID = parcelOwnerUUID;
                landbuyArguments.transactionID = transactionID;

                s.EventManager.TriggerValidateLandBuy(sender, landbuyArguments);
                landbuyArguments.economyValidated = true;

                s.EventManager.TriggerLandBuy(sender, landbuyArguments);

                rparms["success"] = true;
            }
            catch (Exception e)
            {
                rparms["success"] = false;
                m_log.ErrorFormat("[OMECONOMY]: landBuy(...) Exception: {1} - {2}", Name, e.Message, e.StackTrace);
            }

            return(rparms);
        }
        public FreeMoneyTransaction(UUID from, UUID to, string sellersEmail, int amount, Scene scene, string description, InternalTransactionType internalType, EventManager.LandBuyArgs e)
        {
            From         = from;
            InternalType = internalType;
            Description  = description;
            Scene        = scene;
            Amount       = amount;
            SellersEmail = sellersEmail;
            To           = to;
            ObjectID     = UUID.Zero;
            E            = e;

            // Generate a 128-bit Unique ID
            // Using the Crypto Random Generator (increased unguessability)
            byte[] randomBuf = new byte[16];
            RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();

            random.GetBytes(randomBuf);
            Guid txID = new Guid(randomBuf);

            TxID = new UUID(txID);
        }
 public void ProcessParcelBuy(UUID agentId, UUID groupId, bool final, bool groupOwned,
     bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice,
     bool authenticated)
 {
     ILandObject land = GetLandObject(parcelLocalID);
     if (land != null)
     {
         EventManager.LandBuyArgs args = new EventManager.LandBuyArgs(agentId, groupId, final, groupOwned,
                                                                      removeContribution, parcelLocalID,
                                                                      parcelArea,
                                                                      parcelPrice, authenticated,
                                                                      land.LandData.OwnerID);
         // Make sure that we do all checking that we can sell this land
         if (m_scene.EventManager.TriggerValidateBuyLand(args))
         {
             land.UpdateLandSold(args.agentId, args.groupId, args.groupOwned, (uint) args.transactionID,
                                 args.parcelPrice, args.parcelArea);
         }
     }
 }
예제 #6
0
        public virtual void ProcessParcelBuy(UUID agentId, UUID groupId, bool final, bool groupOwned,
                bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated)
        {
            EventManager.LandBuyArgs args = new EventManager.LandBuyArgs(agentId, groupId, final, groupOwned, 
                                                                         removeContribution, parcelLocalID, parcelArea, 
                                                                         parcelPrice, authenticated);

            // First, allow all validators a stab at it
            m_eventManager.TriggerValidateLandBuy(this, args);

            // Then, check validation and transfer
            m_eventManager.TriggerLandBuy(this, args);
        }
예제 #7
0
        private Hashtable landBuy(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();
            try
            {
                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Add("method", "buyLand");
                d.Add("id", (string)requestData["id"]);
                Dictionary<string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

                UUID agentID = UUID.Parse((string)response["senderUUID"]);
                int parcelLocalID = int.Parse((string)response["parcelLocalID"]);
                int transactionID = int.Parse((string)response["transactionID"]);
                int amountDebited = int.Parse((string)response["amountDebited"]);
                bool final = (string)response["final"] == "1" ? true : false;
                bool authenticated = (string)response["authenticated"] == "1" ? true : false;
                bool removeContribution = (string)response["removeContribution"] == "1" ? true : false;

                UUID regionUUID = UUID.Parse(response["regionUUID"]);
                Scene s = SceneHandler.Instance.GetSceneByUUID(regionUUID);
                ILandObject parcel = s.LandChannel.GetLandObject(parcelLocalID);

                UUID groupID = parcel.LandData.GroupID;
                int parcelArea = parcel.LandData.Area;
                int parcelPrice = parcel.LandData.SalePrice;
                bool groupOwned = parcel.LandData.IsGroupOwned;
                UUID parcelOwnerUUID = parcel.LandData.OwnerID;

                EventManager.LandBuyArgs landbuyArguments =
                    new EventManager.LandBuyArgs(agentID, groupID, final, groupOwned, removeContribution,
                                                 parcelLocalID, parcelArea, parcelPrice, authenticated);

                IClientAPI sender = SceneHandler.Instance.LocateClientObject(agentID);
                if (sender == null)
                {
                    throw new Exception("Avatar " + agentID.ToString() + " does not reside in this region");
                }

                landbuyArguments.amountDebited = amountDebited;
                landbuyArguments.parcelOwnerID = parcelOwnerUUID;
                landbuyArguments.transactionID = transactionID;

                s.EventManager.TriggerValidateLandBuy(sender, landbuyArguments);
                landbuyArguments.economyValidated = true;

                s.EventManager.TriggerLandBuy(sender, landbuyArguments);

                rparms["success"] = true;
            }
            catch (Exception e)
            {
                rparms["success"] = false;
                m_log.ErrorFormat("[{0}]: landBuy(...) Exception: {1} - {2}", Name, e.Message, e.StackTrace);
            }

            return rparms;
        }
예제 #8
0
 bool ValidateLandBuy(EventManager.LandBuyArgs e)
 {
     return(m_connector.UserCurrencyTransfer(e.parcelOwnerID, e.agentId,
                                             (uint)e.parcelPrice, "Land Purchase", TransactionType.LandSale,
                                             UUID.Random()));
 }
예제 #9
0
 private void OnValidateLandBuy(Object osender, EventManager.LandBuyArgs e)
 {
     e.economyValidated = false;
 }
예제 #10
0
 private void processLandBuy(Object osender, EventManager.LandBuyArgs e)
 {
 }