Beispiel #1
0
        public Packet RezObject(InventoryItem iitem, LLVector3 TargetPos)
        {
            if (iitem.Type != 6)
            {
                Client.Log("RezObject has only been tested with items of type 6", Helpers.LogLevel.Warning);
            }

            RezObjectPacket p = new RezObjectPacket();

            p.AgentData.AgentID   = AgentID;
            p.AgentData.SessionID = SessionID;
            p.AgentData.GroupID   = LLUUID.Zero;

            p.InventoryData.TransactionID = LLUUID.Random();

            p.InventoryData.GroupOwned    = iitem.GroupOwned;
            p.InventoryData.CRC           = iitem.CRC;
            p.InventoryData.CreationDate  = iitem.CreationDate;
            p.InventoryData.SaleType      = iitem.SaleType;
            p.InventoryData.BaseMask      = iitem.BaseMask;
            p.InventoryData.Name          = Helpers.StringToField(iitem.Name);
            p.InventoryData.InvType       = iitem.InvType;
            p.InventoryData.Type          = iitem.Type;
            p.InventoryData.GroupID       = iitem.GroupID;
            p.InventoryData.SalePrice     = iitem.SalePrice;
            p.InventoryData.OwnerID       = iitem.OwnerID;
            p.InventoryData.CreatorID     = iitem.CreatorID;
            p.InventoryData.ItemID        = iitem.ItemID;
            p.InventoryData.FolderID      = iitem.FolderID;
            p.InventoryData.EveryoneMask  = iitem.EveryoneMask;
            p.InventoryData.Description   = Helpers.StringToField(iitem.Description);
            p.InventoryData.Flags         = iitem.Flags;
            p.InventoryData.NextOwnerMask = iitem.NextOwnerMask;
            p.InventoryData.GroupMask     = iitem.GroupMask;
            p.InventoryData.OwnerMask     = iitem.OwnerMask;

            p.RezData.FromTaskID           = LLUUID.Zero;
            p.RezData.BypassRaycast        = 1;
            p.RezData.RayStart             = Client.Self.Position;
            p.RezData.RayEnd               = TargetPos;
            p.RezData.RayTargetID          = LLUUID.Zero;
            p.RezData.RayEndIsIntersection = false;
            p.RezData.RezSelected          = false;
            p.RezData.RemoveItem           = false;
            p.RezData.ItemFlags            = iitem.Flags;
            p.RezData.GroupMask            = iitem.GroupMask;
            p.RezData.EveryoneMask         = iitem.EveryoneMask;
            p.RezData.NextOwnerMask        = iitem.NextOwnerMask;

            return(p);
        }
Beispiel #2
0
        /// <summary>
        /// A function to rez name from inventory.
        /// </summary>
        /// <param name="name">InventoryItem to rez</param>
        /// <param name="pos">Local sim position</param>
        private void PseudoLLRezObject(InventoryItem name, Vector3 pos)
        {
            RezObjectPacket rez = new RezObjectPacket();

            rez.AgentData                    = new RezObjectPacket.AgentDataBlock();
            rez.AgentData.AgentID            = frame.AgentID;
            rez.AgentData.SessionID          = frame.SessionID;
            rez.AgentData.GroupID            = UUID.Zero;
            rez.RezData                      = new RezObjectPacket.RezDataBlock();
            rez.RezData.FromTaskID           = UUID.Zero;
            rez.RezData.BypassRaycast        = 1;
            rez.RezData.RayStart             = pos;
            rez.RezData.RayEnd               = pos;
            rez.RezData.RayTargetID          = UUID.Zero;
            rez.RezData.RayEndIsIntersection = false;
            rez.RezData.RezSelected          = false;
            rez.RezData.RemoveItem           = false;
            rez.RezData.ItemFlags            = 0;
            rez.RezData.GroupMask            = 0;
            rez.RezData.EveryoneMask         = 0;
            rez.RezData.NextOwnerMask        = 0;
            rez.InventoryData                = new RezObjectPacket.InventoryDataBlock();
            rez.InventoryData.ItemID         = name.UUID;
            rez.InventoryData.FolderID       = name.ParentUUID;
            rez.InventoryData.CreatorID      = name.CreatorID;
            rez.InventoryData.OwnerID        = name.OwnerID;
            rez.InventoryData.GroupID        = name.GroupID;
            rez.InventoryData.BaseMask       = 0;
            rez.InventoryData.OwnerMask      = 0;
            rez.InventoryData.GroupMask      = 0;
            rez.InventoryData.EveryoneMask   = 0;
            rez.InventoryData.NextOwnerMask  = 0;
            rez.InventoryData.GroupOwned     = false;
            rez.InventoryData.TransactionID  = UUID.Zero;
            rez.InventoryData.Type           = 6;
            rez.InventoryData.InvType        = 6;
            rez.InventoryData.Flags          = 0;
            rez.InventoryData.SaleType       = 0;
            rez.InventoryData.SalePrice      = 10;
            rez.InventoryData.Name           = Utils.StringToBytes(name.Name);
            rez.InventoryData.Description    = Utils.StringToBytes(name.Description);
            rez.InventoryData.CreationDate   = 0x7fffffff; //name.CreationDate;
            rez.InventoryData.CRC            = 0;
            rez.Header.Reliable              = true;
            proxy.InjectPacket((Packet)rez, Direction.Outgoing);
        }
        public bool RezObject(SimClient simClient, Packet packet)
        {
            RezObjectPacket rezPacket = (RezObjectPacket)packet;
            AgentInventory  inven     = this._inventoryCache.GetAgentsInventory(simClient.AgentID);

            if (inven != null)
            {
                if (inven.InventoryItems.ContainsKey(rezPacket.InventoryData.ItemID))
                {
                    AssetBase asset = this._assetCache.GetAsset(inven.InventoryItems[rezPacket.InventoryData.ItemID].AssetID);
                    if (asset != null)
                    {
                        PrimData  primd = new PrimData(asset.Data);
                        Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this);
                        nPrim.CreateFromStorage(primd, rezPacket.RezData.RayEnd, this._primCount, true);
                        this.Entities.Add(nPrim.uuid, nPrim);
                        this._primCount++;
                        this._inventoryCache.DeleteInventoryItem(simClient, rezPacket.InventoryData.ItemID);
                    }
                }
            }
            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Rez an object from inventory
        /// </summary>
        /// <param name="simulator">Simulator to place object in</param>
        /// <param name="rotation">Rotation of the object when rezzed</param>
        /// <param name="position">Vector of where to place object</param>
        /// <param name="item">InventoryObject object containing item details</param>
        /// <param name="groupOwner">LLUUID of group to own the object</param>        
        /// <param name="queryID">User defined queryID to correlate replies</param>
        /// <param name="requestObjectDetails">if set to true the simulator
        /// will automatically send object detail packet(s) back to the client</param>
        public LLUUID RequestRezFromInventory(Simulator simulator, LLQuaternion rotation, LLVector3 position,
            InventoryObject item, LLUUID groupOwner, LLUUID queryID, bool requestObjectDetails)
        {
            RezObjectPacket add = new RezObjectPacket();

            add.AgentData.AgentID = _Client.Self.AgentID;
            add.AgentData.SessionID = _Client.Self.SessionID;
            add.AgentData.GroupID = groupOwner;

            add.RezData.FromTaskID = LLUUID.Zero;
            add.RezData.BypassRaycast = 1;
            add.RezData.RayStart = position;
            add.RezData.RayEnd = position;
            add.RezData.RayTargetID = LLUUID.Zero;
            add.RezData.RayEndIsIntersection = false;
            add.RezData.RezSelected = requestObjectDetails;
            add.RezData.RemoveItem = false;
            add.RezData.ItemFlags = item.Flags;
            add.RezData.GroupMask = (uint)item.Permissions.GroupMask;
            add.RezData.EveryoneMask = (uint)item.Permissions.EveryoneMask;
            add.RezData.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;

            add.InventoryData.ItemID = item.UUID;
            add.InventoryData.FolderID = item.ParentUUID;
            add.InventoryData.CreatorID = item.CreatorID;
            add.InventoryData.OwnerID = item.OwnerID;
            add.InventoryData.GroupID = item.GroupID;
            add.InventoryData.BaseMask = (uint)item.Permissions.BaseMask;
            add.InventoryData.OwnerMask = (uint)item.Permissions.OwnerMask;
            add.InventoryData.GroupMask = (uint)item.Permissions.GroupMask;
            add.InventoryData.EveryoneMask = (uint)item.Permissions.EveryoneMask;
            add.InventoryData.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;
            add.InventoryData.GroupOwned = item.GroupOwned;
            add.InventoryData.TransactionID = queryID;
            add.InventoryData.Type = (sbyte)item.InventoryType;
            add.InventoryData.InvType = (sbyte)item.InventoryType;
            add.InventoryData.Flags = item.Flags;
            add.InventoryData.SaleType = (byte)item.SaleType;
            add.InventoryData.SalePrice = item.SalePrice;
            add.InventoryData.Name = Helpers.StringToField(item.Name);
            add.InventoryData.Description = Helpers.StringToField(item.Description);
            add.InventoryData.CreationDate = (int)Helpers.DateTimeToUnixTime(item.CreationDate);

            _Client.Network.SendPacket(add, simulator);

            return queryID;
        }
        public Packet RezObject(InventoryItem iitem, LLVector3 TargetPos)
        {
            if (iitem.Type != 6)
            {
                Client.Log("RezObject has only been tested with items of type 6", Helpers.LogLevel.Warning);
            }

            RezObjectPacket p = new RezObjectPacket();
            p.AgentData.AgentID = AgentID;
            p.AgentData.SessionID = SessionID;
            p.AgentData.GroupID = LLUUID.Zero;

            p.InventoryData.TransactionID = LLUUID.Random();

            p.InventoryData.GroupOwned   = iitem.GroupOwned;
            p.InventoryData.CRC          = iitem.CRC;
            p.InventoryData.CreationDate = iitem.CreationDate;
			p.InventoryData.SaleType	 = iitem.SaleType;
			p.InventoryData.BaseMask	 = iitem.BaseMask;
            p.InventoryData.Name         = Helpers.StringToField(iitem.Name);
			p.InventoryData.InvType		 = iitem.InvType;
			p.InventoryData.Type			= iitem.Type;
			p.InventoryData.GroupID		 = iitem.GroupID;
			p.InventoryData.SalePrice	 = iitem.SalePrice;
			p.InventoryData.OwnerID		 = iitem.OwnerID;
			p.InventoryData.CreatorID	 = iitem.CreatorID;
			p.InventoryData.ItemID		 = iitem.ItemID;
			p.InventoryData.FolderID	 = iitem.FolderID;
            p.InventoryData.EveryoneMask = iitem.EveryoneMask;
            p.InventoryData.Description  = Helpers.StringToField(iitem.Description);
			p.InventoryData.Flags		 = iitem.Flags;
			p.InventoryData.NextOwnerMask= iitem.NextOwnerMask;
			p.InventoryData.GroupMask	 = iitem.GroupMask;
			p.InventoryData.OwnerMask	 = iitem.OwnerMask;

	        p.RezData.FromTaskID = LLUUID.Zero;
		    p.RezData.BypassRaycast = 1;
		    p.RezData.RayStart = Client.Self.Position;
            p.RezData.RayEnd = TargetPos;
		    p.RezData.RayTargetID = LLUUID.Zero;
		    p.RezData.RayEndIsIntersection = false;
		    p.RezData.RezSelected = false;
		    p.RezData.RemoveItem = false;
		    p.RezData.ItemFlags = iitem.Flags;
		    p.RezData.GroupMask = iitem.GroupMask;
		    p.RezData.EveryoneMask = iitem.EveryoneMask;
            p.RezData.NextOwnerMask = iitem.NextOwnerMask;

            return p;
        }
        /// <summary>
        /// Rez an object from inventory
        /// </summary>
        /// <param name="simulator">Simulator to place object in</param>
        /// <param name="taskID">TaskID object when rezzed</param>
        /// <param name="rotation">Rotation of the object when rezzed</param>
        /// <param name="position">Vector of where to place object</param>
        /// <param name="item">InventoryItem object containing item details</param>
        /// <param name="groupOwner">UUID of group to own the object</param>        
        /// <param name="queryID">User defined queryID to correlate replies</param>
        /// <param name="rezSelected">If set to true, the CreateSelected flag
        /// will be set on the rezzed object</param>        
        public UUID RequestRezFromInventory(Simulator simulator, UUID taskID, Quaternion rotation, Vector3 position,
            InventoryItem item, UUID groupOwner, UUID queryID, bool rezSelected)
        {
            RezObjectPacket add = new RezObjectPacket();

            add.AgentData.AgentID = Client.Self.AgentID;
            add.AgentData.SessionID = Client.Self.SessionID;
            add.AgentData.GroupID = groupOwner;

            add.RezData.FromTaskID = taskID;
            add.RezData.BypassRaycast = 1;
            add.RezData.RayStart = position;
            add.RezData.RayEnd = position;
            add.RezData.RayTargetID = UUID.Zero;
            add.RezData.RayEndIsIntersection = false;
            add.RezData.RezSelected = rezSelected;
            add.RezData.RemoveItem = false;
            add.RezData.ItemFlags = (uint)item.Flags;
            add.RezData.GroupMask = (uint)item.Permissions.GroupMask;
            add.RezData.EveryoneMask = (uint)item.Permissions.EveryoneMask;
            add.RezData.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;

            add.InventoryData.ItemID = item.UUID;
            add.InventoryData.FolderID = item.ParentUUID;
            add.InventoryData.CreatorID = item.CreatorID;
            add.InventoryData.OwnerID = item.OwnerID;
            add.InventoryData.GroupID = item.GroupID;
            add.InventoryData.BaseMask = (uint)item.Permissions.BaseMask;
            add.InventoryData.OwnerMask = (uint)item.Permissions.OwnerMask;
            add.InventoryData.GroupMask = (uint)item.Permissions.GroupMask;
            add.InventoryData.EveryoneMask = (uint)item.Permissions.EveryoneMask;
            add.InventoryData.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;
            add.InventoryData.GroupOwned = item.GroupOwned;
            add.InventoryData.TransactionID = queryID;
            add.InventoryData.Type = (sbyte)item.InventoryType;
            add.InventoryData.InvType = (sbyte)item.InventoryType;
            add.InventoryData.Flags = (uint)item.Flags;
            add.InventoryData.SaleType = (byte)item.SaleType;
            add.InventoryData.SalePrice = item.SalePrice;
            add.InventoryData.Name = Utils.StringToBytes(item.Name);
            add.InventoryData.Description = Utils.StringToBytes(item.Description);
            add.InventoryData.CreationDate = (int)Utils.DateTimeToUnixTime(item.CreationDate);

            Client.Network.SendPacket(add, simulator);

            // Remove from store if the item is no copy
            if (Store.Items.ContainsKey(item.UUID) && Store[item.UUID] is InventoryItem)
            {
                InventoryItem invItem = (InventoryItem)Store[item.UUID];
                if ((invItem.Permissions.OwnerMask & PermissionMask.Copy) == PermissionMask.None)
                {
                    Store.RemoveNodeFor(invItem);
                }
            }

            return queryID;
        }
Beispiel #7
0
        private void RezSinglePrim(LLPrimitive prim, RezObjectPacket.RezDataBlock rezData, Vector3 position)
        {
            // Set the target position for root prims
            if (prim.Parent == null)
                prim.RelativePosition = position;

            // TODO: Is this right?
            prim.Prim.Flags |= (PrimFlags)rezData.ItemFlags;

            if (rezData.RezSelected)
                prim.Prim.Flags |= PrimFlags.CreateSelected;

            // TODO: Is this right?
            prim.Prim.Properties.Permissions = GetDefaultPermissions();
            prim.Prim.Properties.Permissions.EveryoneMask = (PermissionMask)rezData.EveryoneMask;
            prim.Prim.Properties.Permissions.GroupMask = (PermissionMask)rezData.GroupMask;
            prim.Prim.Properties.Permissions.NextOwnerMask = (PermissionMask)rezData.NextOwnerMask;

            m_scene.EntityAddOrUpdate(this, prim, UpdateFlags.FullUpdate, 0);
        }
Beispiel #8
0
 /// <summary>
 /// A function to rez name from inventory.
 /// </summary>
 /// <param name="name">InventoryItem to rez</param>
 /// <param name="pos">Local sim position</param>
 private void PseudoLLRezObject(InventoryItem name, Vector3 pos)
 {
     RezObjectPacket rez = new RezObjectPacket();
     rez.AgentData = new RezObjectPacket.AgentDataBlock();
     rez.AgentData.AgentID = frame.AgentID;
     rez.AgentData.SessionID = frame.SessionID;
     rez.AgentData.GroupID = UUID.Zero;
     rez.RezData = new RezObjectPacket.RezDataBlock();
     rez.RezData.FromTaskID = UUID.Zero;
     rez.RezData.BypassRaycast = 1;
     rez.RezData.RayStart = pos;
     rez.RezData.RayEnd = pos;
     rez.RezData.RayTargetID = UUID.Zero;
     rez.RezData.RayEndIsIntersection = false;
     rez.RezData.RezSelected = false;
     rez.RezData.RemoveItem = false;
     rez.RezData.ItemFlags = 0;
     rez.RezData.GroupMask = 0;
     rez.RezData.EveryoneMask = 0;
     rez.RezData.NextOwnerMask = 0;
     rez.InventoryData = new RezObjectPacket.InventoryDataBlock();
     rez.InventoryData.ItemID = name.UUID;
     rez.InventoryData.FolderID = name.ParentUUID;
     rez.InventoryData.CreatorID = name.CreatorID;
     rez.InventoryData.OwnerID = name.OwnerID;
     rez.InventoryData.GroupID = name.GroupID;
     rez.InventoryData.BaseMask = 0;
     rez.InventoryData.OwnerMask = 0;
     rez.InventoryData.GroupMask = 0;
     rez.InventoryData.EveryoneMask = 0;
     rez.InventoryData.NextOwnerMask = 0;
     rez.InventoryData.GroupOwned = false;
     rez.InventoryData.TransactionID = UUID.Zero;
     rez.InventoryData.Type = 6;
     rez.InventoryData.InvType = 6;
     rez.InventoryData.Flags = 0;
     rez.InventoryData.SaleType = 0;
     rez.InventoryData.SalePrice = 10;
     rez.InventoryData.Name = Utils.StringToBytes(name.Name);
     rez.InventoryData.Description = Utils.StringToBytes(name.Description);
     rez.InventoryData.CreationDate = 0x7fffffff; //name.CreationDate;
     rez.InventoryData.CRC = 0;
     rez.Header.Reliable = true;
     proxy.InjectPacket((Packet)rez, Direction.Outgoing);
 }