aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTeravus Ovares2008-05-16 23:11:00 +0000
committerTeravus Ovares2008-05-16 23:11:00 +0000
commitaa5197304e2bb8c6b2f7bf3c8e86256042cf23b8 (patch)
treec55e7c94e4978bbc073947da44b383c692d8f5c6
parentminor change to justin's previous fix that should still (diff)
downloadopensim-SC-aa5197304e2bb8c6b2f7bf3c8e86256042cf23b8.zip
opensim-SC-aa5197304e2bb8c6b2f7bf3c8e86256042cf23b8.tar.gz
opensim-SC-aa5197304e2bb8c6b2f7bf3c8e86256042cf23b8.tar.bz2
opensim-SC-aa5197304e2bb8c6b2f7bf3c8e86256042cf23b8.tar.xz
* Committing patch from mantis 0001297: [PATCH] Fix behavior of child prim inventories. Also enables 'New Script' button. from Melanie. Thanks Melanie!
-rw-r--r--OpenSim/Framework/IClientAPI.cs2
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs21
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs53
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs8
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs14
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs16
6 files changed, 89 insertions, 25 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 343b5a6..44d3295 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -564,7 +564,7 @@ namespace OpenSim.Framework
564 564
565 public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest); 565 public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest);
566 566
567 public delegate void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID); 567 public delegate void RezScript(IClientAPI remoteClient, InventoryItemBase item, LLUUID transactionID, uint localID);
568 568
569 public delegate void UpdateTaskInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID folderID, uint localID); 569 public delegate void UpdateTaskInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID folderID, uint localID);
570 570
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index d6329ce..4d27a0c 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -5007,10 +5007,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5007 RezScriptPacket rezScriptx = (RezScriptPacket)Pack; 5007 RezScriptPacket rezScriptx = (RezScriptPacket)Pack;
5008 5008
5009 handlerRezScript = OnRezScript; 5009 handlerRezScript = OnRezScript;
5010 InventoryItemBase item=new InventoryItemBase();
5011 item.ID=rezScriptx.InventoryBlock.ItemID;
5012 item.Folder=rezScriptx.InventoryBlock.FolderID;
5013 item.Creator=rezScriptx.InventoryBlock.CreatorID;
5014 item.Owner=rezScriptx.InventoryBlock.OwnerID;
5015 item.BasePermissions=rezScriptx.InventoryBlock.BaseMask;
5016 item.CurrentPermissions=rezScriptx.InventoryBlock.OwnerMask;
5017 item.EveryOnePermissions=rezScriptx.InventoryBlock.EveryoneMask;
5018 item.NextPermissions=rezScriptx.InventoryBlock.NextOwnerMask;
5019 item.GroupOwned=rezScriptx.InventoryBlock.GroupOwned;
5020 item.GroupID=rezScriptx.InventoryBlock.GroupID;
5021 item.AssetType=rezScriptx.InventoryBlock.Type;
5022 item.InvType=rezScriptx.InventoryBlock.InvType;
5023 item.Flags=rezScriptx.InventoryBlock.Flags;
5024 item.SaleType=rezScriptx.InventoryBlock.SaleType;
5025 item.SalePrice=rezScriptx.InventoryBlock.SalePrice;
5026 item.Name=Util.FieldToString(rezScriptx.InventoryBlock.Name);
5027 item.Description=Util.FieldToString(rezScriptx.InventoryBlock.Description);
5028 item.CreationDate=(int)rezScriptx.InventoryBlock.CreationDate;
5010 5029
5011 if (handlerRezScript != null) 5030 if (handlerRezScript != null)
5012 { 5031 {
5013 handlerRezScript(this, rezScriptx.InventoryBlock.ItemID, rezScriptx.UpdateBlock.ObjectLocalID); 5032 handlerRezScript(this, item, rezScriptx.InventoryBlock.TransactionID, rezScriptx.UpdateBlock.ObjectLocalID);
5014 } 5033 }
5015 break; 5034 break;
5016 5035
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index 5e2ccec..0447631 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -221,7 +221,7 @@ namespace OpenSim.Region.Environment.Scenes
221 // Update item with new asset 221 // Update item with new asset
222 item.AssetID = asset.FullID; 222 item.AssetID = asset.FullID;
223 group.UpdateInventoryItem(item); 223 group.UpdateInventoryItem(item);
224 group.GetProperties(remoteClient); 224 part.GetProperties(remoteClient);
225 225
226 // Trigger rerunning of script (use TriggerRezScript event, see RezScript) 226 // Trigger rerunning of script (use TriggerRezScript event, see RezScript)
227 if (isScriptRunning) 227 if (isScriptRunning)
@@ -572,7 +572,7 @@ namespace OpenSim.Region.Environment.Scenes
572 private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID, 572 private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID,
573 AssetBase asset, uint nextOwnerMask) 573 AssetBase asset, uint nextOwnerMask)
574 { 574 {
575 CreateNewInventoryItem(remoteClient, folderID, callbackID, asset, nextOwnerMask, nextOwnerMask, 0, nextOwnerMask); 575 CreateNewInventoryItem(remoteClient, folderID, callbackID, asset, (uint)PermissionMask.All, (uint)PermissionMask.All, 0, nextOwnerMask);
576 } 576 }
577 577
578 /// <summary> 578 /// <summary>
@@ -789,11 +789,12 @@ namespace OpenSim.Region.Environment.Scenes
789 /// <param name="localID"></param> 789 /// <param name="localID"></param>
790 public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID) 790 public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID)
791 { 791 {
792 SceneObjectGroup group = GetGroupByPrim(localID); 792 SceneObjectPart part = GetSceneObjectPart(localID);
793 SceneObjectGroup group = part.ParentGroup;
793 if (group != null) 794 if (group != null)
794 { 795 {
795 int type = group.RemoveInventoryItem(localID, itemID); 796 int type = group.RemoveInventoryItem(localID, itemID);
796 group.GetProperties(remoteClient); 797 part.GetProperties(remoteClient);
797 if (type == 10) 798 if (type == 10)
798 { 799 {
799 EventManager.TriggerRemoveScript(localID, itemID); 800 EventManager.TriggerRemoveScript(localID, itemID);
@@ -917,7 +918,7 @@ namespace OpenSim.Region.Environment.Scenes
917 m_log.InfoFormat( 918 m_log.InfoFormat(
918 "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", 919 "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
919 item.Name, primLocalID, remoteClient.Name); 920 item.Name, primLocalID, remoteClient.Name);
920 part.ParentGroup.GetProperties(remoteClient); 921 part.GetProperties(remoteClient);
921 if (!ExternalChecks.ExternalChecksBypassPermissions()) 922 if (!ExternalChecks.ExternalChecksBypassPermissions())
922 { 923 {
923 if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) 924 if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
@@ -948,8 +949,9 @@ namespace OpenSim.Region.Environment.Scenes
948 /// <param name="remoteClient"></param> 949 /// <param name="remoteClient"></param>
949 /// <param name="itemID"> </param> 950 /// <param name="itemID"> </param>
950 /// <param name="localID"></param> 951 /// <param name="localID"></param>
951 public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) 952 public void RezScript(IClientAPI remoteClient, InventoryItemBase itemBase, LLUUID transactionID, uint localID)
952 { 953 {
954 LLUUID itemID=itemBase.ID;
953 LLUUID copyID = LLUUID.Random(); 955 LLUUID copyID = LLUUID.Random();
954 956
955 if (itemID != LLUUID.Zero) 957 if (itemID != LLUUID.Zero)
@@ -974,7 +976,7 @@ namespace OpenSim.Region.Environment.Scenes
974 { 976 {
975 part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); 977 part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
976 part.ParentGroup.StartScript(localID, copyID); 978 part.ParentGroup.StartScript(localID, copyID);
977 part.ParentGroup.GetProperties(remoteClient); 979 part.GetProperties(remoteClient);
978 980
979 // m_log.InfoFormat("[PRIMINVENTORY]: " + 981 // m_log.InfoFormat("[PRIMINVENTORY]: " +
980 // "Rezzed script {0} into prim local ID {1} for user {2}", 982 // "Rezzed script {0} into prim local ID {1} for user {2}",
@@ -999,11 +1001,38 @@ namespace OpenSim.Region.Environment.Scenes
999 } 1001 }
1000 else // If the itemID is zero then the script has been rezzed directly in an object's inventory 1002 else // If the itemID is zero then the script has been rezzed directly in an object's inventory
1001 { 1003 {
1002 // not yet implemented 1004 SceneObjectPart part=GetSceneObjectPart(itemBase.Folder);
1003 // TODO Need to get more details from original RezScript packet 1005 if(part == null)
1004 // XXX jc tmp 1006 return;
1005// AssetBase asset = CreateAsset("chimney sweep", "sailor.lsl", 10, 10, null); 1007
1006// AssetCache.AddAsset(asset); 1008 AssetBase asset = CreateAsset(itemBase.Name, itemBase.Description, (sbyte)itemBase.InvType, (sbyte)itemBase.AssetType, Encoding.ASCII.GetBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"));
1009 AssetCache.AddAsset(asset);
1010
1011 TaskInventoryItem taskItem=new TaskInventoryItem();
1012
1013 taskItem.ResetIDs(itemBase.Folder);
1014 taskItem.ParentID = itemBase.Folder;
1015 taskItem.CreationDate = (uint)itemBase.CreationDate;
1016 taskItem.Name = itemBase.Name;
1017 taskItem.Description = itemBase.Description;
1018 taskItem.Type = itemBase.AssetType;
1019 taskItem.InvType = itemBase.InvType;
1020 taskItem.OwnerID = itemBase.Owner;
1021 taskItem.CreatorID = itemBase.Creator;
1022 taskItem.BaseMask = itemBase.BasePermissions;
1023 taskItem.OwnerMask = itemBase.CurrentPermissions;
1024 taskItem.EveryoneMask = itemBase.EveryOnePermissions;
1025 taskItem.NextOwnerMask = itemBase.NextPermissions;
1026 taskItem.GroupID = itemBase.GroupID;
1027 taskItem.GroupMask = 0;
1028 taskItem.Flags = itemBase.Flags;
1029 taskItem.PermsGranter = LLUUID.Zero;
1030 taskItem.PermsMask = 0;
1031 taskItem.AssetID = asset.ID;
1032
1033 part.AddInventoryItem(taskItem);
1034 part.GetProperties(remoteClient);
1035 part.StartScript(taskItem);
1007 } 1036 }
1008 } 1037 }
1009 1038
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 332d160..7f26f35 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1927,13 +1927,7 @@ namespace OpenSim.Region.Environment.Scenes
1927 /// <param name="client"></param> 1927 /// <param name="client"></param>
1928 public void GetProperties(IClientAPI client) 1928 public void GetProperties(IClientAPI client)
1929 { 1929 {
1930 1930 m_rootPart.GetProperties(client);
1931 client.SendObjectPropertiesReply(LLUUID.Zero, (ulong)m_rootPart.CreationDate, m_rootPart.CreatorID, LLUUID.Zero, LLUUID.Zero,
1932 LLUUID.Zero, (short)m_rootPart.InventorySerial, m_rootPart.LastOwnerID, UUID, m_rootPart.OwnerID,
1933 m_rootPart.TouchName, new byte[0], m_rootPart.SitName, m_rootPart.Name, m_rootPart.Description,
1934 m_rootPart.OwnerMask, m_rootPart.NextOwnerMask, m_rootPart.GroupMask, m_rootPart.EveryoneMask,
1935 m_rootPart.BaseMask);
1936
1937 } 1931 }
1938 1932
1939 /// <summary> 1933 /// <summary>
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
index b151d75..0444685 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
@@ -42,6 +42,7 @@ namespace OpenSim.Region.Environment.Scenes
42 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 42 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43 43
44 private string m_inventoryFileName = String.Empty; 44 private string m_inventoryFileName = String.Empty;
45 private int m_inventoryFileNameSerial = 0;
45 46
46 /// <summary> 47 /// <summary>
47 /// Exposing this is not particularly good, but it's one of the least evils at the moment to see 48 /// Exposing this is not particularly good, but it's one of the least evils at the moment to see
@@ -444,6 +445,17 @@ namespace OpenSim.Region.Environment.Scenes
444 return -1; 445 return -1;
445 } 446 }
446 447
448 public string GetInventoryFileName()
449 {
450 if(m_inventoryFileName == String.Empty)
451 m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp";
452 if(m_inventoryFileNameSerial < m_inventorySerial)
453 {
454 m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp";
455 }
456 return m_inventoryFileName;
457 }
458
447 /// <summary> 459 /// <summary>
448 /// Return the name with which a client can request a xfer of this prim's inventory metadata 460 /// Return the name with which a client can request a xfer of this prim's inventory metadata
449 /// </summary> 461 /// </summary>
@@ -458,7 +470,7 @@ namespace OpenSim.Region.Environment.Scenes
458 if (m_inventorySerial > 0) 470 if (m_inventorySerial > 0)
459 { 471 {
460 client.SendTaskInventory(m_uuid, (short)m_inventorySerial, 472 client.SendTaskInventory(m_uuid, (short)m_inventorySerial,
461 Helpers.StringToField(m_inventoryFileName)); 473 Helpers.StringToField(GetInventoryFileName()));
462 return true; 474 return true;
463 } 475 }
464 else 476 else
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 80b93b1..a7b7692 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -759,7 +759,6 @@ namespace OpenSim.Region.Environment.Scenes
759 public SceneObjectPart() 759 public SceneObjectPart()
760 { 760 {
761 // It's not necessary to persist this 761 // It's not necessary to persist this
762 m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp";
763 m_TextureAnimation = new byte[0]; 762 m_TextureAnimation = new byte[0];
764 } 763 }
765 764
@@ -808,7 +807,6 @@ namespace OpenSim.Region.Environment.Scenes
808 AngularVelocity = new LLVector3(0, 0, 0); 807 AngularVelocity = new LLVector3(0, 0, 0);
809 Acceleration = new LLVector3(0, 0, 0); 808 Acceleration = new LLVector3(0, 0, 0);
810 m_TextureAnimation = new byte[0]; 809 m_TextureAnimation = new byte[0];
811 m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp";
812 810
813 // Prims currently only contain a single folder (Contents). From looking at the Second Life protocol, 811 // Prims currently only contain a single folder (Contents). From looking at the Second Life protocol,
814 // this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from 812 // this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from
@@ -2530,7 +2528,7 @@ namespace OpenSim.Region.Environment.Scenes
2530 throw new ArgumentNullException("info"); 2528 throw new ArgumentNullException("info");
2531 } 2529 }
2532 2530
2533 info.AddValue("m_inventoryFileName", m_inventoryFileName); 2531 info.AddValue("m_inventoryFileName", GetInventoryFileName());
2534 info.AddValue("m_folderID", UUID); 2532 info.AddValue("m_folderID", UUID);
2535 info.AddValue("PhysActor", PhysActor); 2533 info.AddValue("PhysActor", PhysActor);
2536 2534
@@ -2758,5 +2756,17 @@ namespace OpenSim.Region.Environment.Scenes
2758 2756
2759 return m_parentGroup.RootPart.DIE_AT_EDGE; 2757 return m_parentGroup.RootPart.DIE_AT_EDGE;
2760 } 2758 }
2759
2760 public void GetProperties(IClientAPI client)
2761 {
2762
2763 client.SendObjectPropertiesReply(LLUUID.Zero, (ulong)CreationDate, CreatorID, LLUUID.Zero, LLUUID.Zero,
2764 LLUUID.Zero, (short)InventorySerial, LastOwnerID, UUID, OwnerID,
2765 ParentGroup.RootPart.TouchName, new byte[0], ParentGroup.RootPart.SitName, Name, Description,
2766 ParentGroup.RootPart.OwnerMask, ParentGroup.RootPart.NextOwnerMask, ParentGroup.RootPart.GroupMask, ParentGroup.RootPart.EveryoneMask,
2767 ParentGroup.RootPart.BaseMask);
2768
2769 }
2770
2761 } 2771 }
2762} 2772}