mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 10:46:00 +08:00
Merge branch 'master' into careminster-presence-refactor
This commit is contained in:
@@ -420,11 +420,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
if (m_scenePresence.IsChildAgent)
|
||||
return;
|
||||
|
||||
m_scenePresence.Scene.ForEachScenePresence(
|
||||
delegate(ScenePresence SP)
|
||||
{
|
||||
SP.Animator.SendAnimPack();
|
||||
});
|
||||
UUID[] animIDs;
|
||||
int[] sequenceNums;
|
||||
UUID[] objectIDs;
|
||||
|
||||
m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs);
|
||||
client.SendAnimations(animIDs, sequenceNums, m_scenePresence.ControllingClient.AgentId, objectIDs);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -35,7 +35,6 @@ using OpenMetaverse;
|
||||
using OpenMetaverse.Packets;
|
||||
using log4net;
|
||||
using OpenSim.Framework;
|
||||
|
||||
using OpenSim.Region.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||
@@ -64,6 +63,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if (group is SceneObjectGroup)
|
||||
{
|
||||
((SceneObjectGroup) group).CreateScriptInstances(0, false, DefaultScriptEngine, 0);
|
||||
((SceneObjectGroup) group).ResumeScripts();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +218,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
remoteClient.SendAgentAlertMessage("Script saved", false);
|
||||
}
|
||||
part.ParentGroup.ResumeScripts();
|
||||
return errors;
|
||||
}
|
||||
|
||||
@@ -471,7 +472,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
if (recipientParentFolderId == UUID.Zero)
|
||||
{
|
||||
InventoryFolderBase recipientRootFolder = InventoryService.GetRootFolder(recipientId);
|
||||
@@ -721,6 +721,37 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleLinkInventoryItem(IClientAPI remoteClient, UUID transActionID, UUID folderID,
|
||||
uint callbackID, string description, string name,
|
||||
sbyte invType, sbyte type, UUID olditemID)
|
||||
{
|
||||
m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item link {0} in folder {1} pointing to {2}", name, folderID, olditemID);
|
||||
|
||||
if (!Permissions.CanCreateUserInventory(invType, remoteClient.AgentId))
|
||||
return;
|
||||
|
||||
ScenePresence presence;
|
||||
if (TryGetScenePresence(remoteClient.AgentId, out presence))
|
||||
{
|
||||
byte[] data = null;
|
||||
|
||||
AssetBase asset = new AssetBase();
|
||||
asset.FullID = olditemID;
|
||||
asset.Type = type;
|
||||
asset.Name = name;
|
||||
asset.Description = description;
|
||||
|
||||
CreateNewInventoryItem(remoteClient, remoteClient.AgentId.ToString(), folderID, name, 0, callbackID, asset, invType, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, (uint)PermissionMask.All, Util.UnixTimeSinceEpoch());
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"ScenePresence for agent uuid {0} unexpectedly not found in HandleLinkInventoryItem",
|
||||
remoteClient.AgentId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove an inventory item for the client's inventory
|
||||
/// </summary>
|
||||
@@ -1163,6 +1194,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item = LibraryService.LibraryRootFolder.FindItem(itemID);
|
||||
}
|
||||
|
||||
// If we've found the item in the user's inventory or in the library
|
||||
if (item != null)
|
||||
{
|
||||
part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID);
|
||||
@@ -1841,50 +1873,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
EventManager.TriggerStopScript(part.LocalId, itemID);
|
||||
}
|
||||
|
||||
internal void SendAttachEvent(uint localID, UUID itemID, UUID avatarID)
|
||||
{
|
||||
EventManager.TriggerOnAttach(localID, itemID, avatarID);
|
||||
}
|
||||
|
||||
public void RezMultipleAttachments(IClientAPI remoteClient, RezMultipleAttachmentsFromInvPacket.HeaderDataBlock header,
|
||||
RezMultipleAttachmentsFromInvPacket.ObjectDataBlock[] objects)
|
||||
{
|
||||
foreach (RezMultipleAttachmentsFromInvPacket.ObjectDataBlock obj in objects)
|
||||
{
|
||||
AttachmentsModule.RezSingleAttachmentFromInventory(remoteClient, obj.ItemID, obj.AttachmentPt);
|
||||
}
|
||||
}
|
||||
|
||||
public void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient)
|
||||
{
|
||||
SceneObjectPart part = GetSceneObjectPart(itemID);
|
||||
if (part == null || part.ParentGroup == null)
|
||||
return;
|
||||
|
||||
UUID inventoryID = part.ParentGroup.GetFromItemID();
|
||||
|
||||
ScenePresence presence;
|
||||
if (TryGetScenePresence(remoteClient.AgentId, out presence))
|
||||
{
|
||||
if (!Permissions.CanRezObject(part.ParentGroup.Children.Count, remoteClient.AgentId, presence.AbsolutePosition))
|
||||
return;
|
||||
|
||||
presence.Appearance.DetachAttachment(itemID);
|
||||
IAvatarFactory ava = RequestModuleInterface<IAvatarFactory>();
|
||||
if (ava != null)
|
||||
{
|
||||
ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||
}
|
||||
part.ParentGroup.DetachToGround();
|
||||
|
||||
List<UUID> uuids = new List<UUID>();
|
||||
uuids.Add(inventoryID);
|
||||
InventoryService.DeleteItems(remoteClient.AgentId, uuids);
|
||||
remoteClient.SendRemoveInventoryItem(inventoryID);
|
||||
}
|
||||
SendAttachEvent(part.ParentGroup.LocalId, itemID, UUID.Zero);
|
||||
}
|
||||
|
||||
public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
||||
{
|
||||
EventManager.TriggerGetScriptRunning(controllingClient, objectID, itemID);
|
||||
|
||||
@@ -1159,7 +1159,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (m_scripts_enabled != !ScriptEngine)
|
||||
{
|
||||
// Tedd! Here's the method to disable the scripting engine!
|
||||
if (ScriptEngine)
|
||||
{
|
||||
m_log.Info("Stopping all Scripts in Scene");
|
||||
@@ -1181,6 +1180,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if (ent is SceneObjectGroup)
|
||||
{
|
||||
((SceneObjectGroup)ent).CreateScriptInstances(0, false, DefaultScriptEngine, 0);
|
||||
((SceneObjectGroup)ent).ResumeScripts();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2777,6 +2777,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
public virtual void SubscribeToClientInventoryEvents(IClientAPI client)
|
||||
{
|
||||
client.OnCreateNewInventoryItem += CreateNewInventoryItem;
|
||||
client.OnLinkInventoryItem += HandleLinkInventoryItem;
|
||||
client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder;
|
||||
client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder;
|
||||
client.OnMoveInventoryFolder += HandleMoveInventoryFolder; // 2; //!!
|
||||
@@ -2796,14 +2797,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
|
||||
public virtual void SubscribeToClientAttachmentEvents(IClientAPI client)
|
||||
{
|
||||
client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments;
|
||||
client.OnObjectDetach += m_sceneGraph.DetachObject;
|
||||
|
||||
{
|
||||
if (AttachmentsModule != null)
|
||||
{
|
||||
client.OnRezSingleAttachmentFromInv += AttachmentsModule.RezSingleAttachmentFromInventory;
|
||||
client.OnRezMultipleAttachmentsFromInv += AttachmentsModule.RezMultipleAttachmentsFromInventory;
|
||||
client.OnObjectAttach += AttachmentsModule.AttachObject;
|
||||
client.OnObjectDetach += AttachmentsModule.DetachObject;
|
||||
client.OnDetachAttachmentIntoInv += AttachmentsModule.ShowDetachInUserInventory;
|
||||
}
|
||||
}
|
||||
@@ -2952,14 +2952,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
|
||||
public virtual void UnSubscribeToClientAttachmentEvents(IClientAPI client)
|
||||
{
|
||||
client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachments;
|
||||
client.OnObjectDetach -= m_sceneGraph.DetachObject;
|
||||
|
||||
{
|
||||
if (AttachmentsModule != null)
|
||||
{
|
||||
client.OnRezSingleAttachmentFromInv -= AttachmentsModule.RezSingleAttachmentFromInventory;
|
||||
client.OnRezSingleAttachmentFromInv -= AttachmentsModule.RezSingleAttachmentFromInventory;
|
||||
client.OnRezMultipleAttachmentsFromInv -= AttachmentsModule.RezMultipleAttachmentsFromInventory;
|
||||
client.OnObjectAttach -= AttachmentsModule.AttachObject;
|
||||
client.OnObjectDetach -= AttachmentsModule.DetachObject;
|
||||
client.OnDetachAttachmentIntoInv -= AttachmentsModule.ShowDetachInUserInventory;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,9 +467,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
SceneObjectGroup group = GetGroupByPrim(objectLocalID);
|
||||
if (group != null)
|
||||
{
|
||||
m_parentScene.DetachSingleAttachmentToGround(group.UUID, remoteClient);
|
||||
}
|
||||
m_parentScene.AttachmentsModule.DetachSingleAttachmentToGround(group.UUID, remoteClient);
|
||||
}
|
||||
|
||||
protected internal void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
||||
@@ -1781,6 +1779,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 0);
|
||||
copy.HasGroupChanged = true;
|
||||
copy.ScheduleGroupForFullUpdate();
|
||||
copy.ResumeScripts();
|
||||
|
||||
// required for physics to update it's position
|
||||
copy.AbsolutePosition = copy.AbsolutePosition;
|
||||
|
||||
@@ -171,7 +171,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item.NextPermissions;
|
||||
taskItem.NextPermissions = item.NextPermissions;
|
||||
taskItem.CurrentPermissions |= 8;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
taskItem.BasePermissions = item.BasePermissions;
|
||||
taskItem.CurrentPermissions = item.CurrentPermissions;
|
||||
taskItem.CurrentPermissions |= 8;
|
||||
@@ -412,5 +414,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
scriptModule.SetXMLState(itemID, n.OuterXml);
|
||||
}
|
||||
}
|
||||
|
||||
public void ResumeScripts()
|
||||
{
|
||||
foreach (SceneObjectPart part in m_parts.Values)
|
||||
{
|
||||
part.Inventory.ResumeScripts();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,7 +212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList GetScriptErrors(UUID itemID)
|
||||
public ArrayList GetScriptErrors(UUID itemID)
|
||||
{
|
||||
ArrayList ret = new ArrayList();
|
||||
|
||||
@@ -653,6 +653,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item.ParentID = m_part.UUID;
|
||||
item.ParentPartID = m_part.UUID;
|
||||
item.Name = name;
|
||||
item.GroupID = m_part.GroupID;
|
||||
|
||||
m_items.LockItemsForWrite(true);
|
||||
m_items.Add(item.ItemID, item);
|
||||
@@ -742,6 +743,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item.ParentID = m_part.UUID;
|
||||
item.ParentPartID = m_part.UUID;
|
||||
item.Flags = m_items[item.ItemID].Flags;
|
||||
|
||||
// If group permissions have been set on, check that the groupID is up to date in case it has
|
||||
// changed since permissions were last set.
|
||||
if (item.GroupPermissions != (uint)PermissionMask.None)
|
||||
item.GroupID = m_part.GroupID;
|
||||
|
||||
if (item.AssetID == UUID.Zero)
|
||||
{
|
||||
item.AssetID = m_items[item.ItemID].AssetID;
|
||||
@@ -894,6 +901,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
uint everyoneMask = 0;
|
||||
uint baseMask = item.BasePermissions;
|
||||
uint ownerMask = item.CurrentPermissions;
|
||||
uint groupMask = item.GroupPermissions;
|
||||
|
||||
invString.AddItemStart();
|
||||
invString.AddNameValueLine("item_id", item.ItemID.ToString());
|
||||
@@ -903,7 +911,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
|
||||
invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
|
||||
invString.AddNameValueLine("group_mask", Utils.UIntToHexString(0));
|
||||
invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
|
||||
invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
|
||||
invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
|
||||
|
||||
@@ -1137,5 +1145,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void ResumeScripts()
|
||||
{
|
||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||
if (engines == null)
|
||||
return;
|
||||
|
||||
|
||||
Items.LockItemsForRead(true);
|
||||
|
||||
foreach (TaskInventoryItem item in m_items.Values)
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
foreach (IScriptModule engine in engines)
|
||||
{
|
||||
if (engine != null)
|
||||
engine.ResumeScript(item.ItemID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Items.LockItemsForRead(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -959,6 +959,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
m_isChildAgent = false;
|
||||
|
||||
// send the animations of the other presences to me
|
||||
m_scene.ForEachScenePresence(delegate(ScenePresence presence)
|
||||
{
|
||||
if (presence != this)
|
||||
|
||||
@@ -182,6 +182,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
foreach (SceneObjectGroup sceneObject in sceneObjects)
|
||||
{
|
||||
sceneObject.CreateScriptInstances(0, true, scene.DefaultScriptEngine, 0);
|
||||
sceneObject.ResumeScripts();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user