Merge branch 'ubitwork' of ssh://3dhosting.de/var/git/careminster into ubitwork
commit
7a4dba2fdc
|
@ -51,7 +51,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
public enum EventType : int
|
public enum EventType : int
|
||||||
{
|
{
|
||||||
Normal = 0,
|
Normal = 0,
|
||||||
LslHttp = 1
|
LslHttp = 1,
|
||||||
|
Inventory = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
public PollServiceEventArgs(
|
public PollServiceEventArgs(
|
||||||
|
|
|
@ -231,7 +231,8 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
if (m_running)
|
if (m_running)
|
||||||
{
|
{
|
||||||
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp)
|
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp ||
|
||||||
|
req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Inventory)
|
||||||
{
|
{
|
||||||
m_requests.Enqueue(req);
|
m_requests.Enqueue(req);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private Commands m_commands = new Commands();
|
private Commands m_commands = new Commands();
|
||||||
public ICommands Commands { get { return m_commands; } }
|
public ICommands Commands { get { return m_commands; } }
|
||||||
|
|
||||||
|
public event ConsoleMessage OnConsoleMessage;
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
m_commands.AddCommand( "Help", false, "help", "help [<item>]", "Display help on a particular command or on a list of commands in a category", Help);
|
m_commands.AddCommand( "Help", false, "help", "help [<item>]", "Display help on a particular command or on a list of commands in a category", Help);
|
||||||
|
@ -118,6 +120,11 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
OSD osd = OSD.FromString(message);
|
OSD osd = OSD.FromString(message);
|
||||||
|
|
||||||
m_eventQueue.Enqueue(EventQueueHelper.BuildEvent("SimConsoleResponse", osd), agentID);
|
m_eventQueue.Enqueue(EventQueueHelper.BuildEvent("SimConsoleResponse", osd), agentID);
|
||||||
|
|
||||||
|
ConsoleMessage handlerConsoleMessage = OnConsoleMessage;
|
||||||
|
|
||||||
|
if (handlerConsoleMessage != null)
|
||||||
|
handlerConsoleMessage( agentID, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool RunCommand(string command, UUID invokerID)
|
public bool RunCommand(string command, UUID invokerID)
|
||||||
|
|
|
@ -27,12 +27,15 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
@ -48,67 +51,49 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||||
public class WebFetchInvDescModule : INonSharedRegionModule
|
public class WebFetchInvDescModule : INonSharedRegionModule
|
||||||
{
|
{
|
||||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
private IInventoryService m_InventoryService;
|
private IInventoryService m_InventoryService;
|
||||||
private ILibraryService m_LibraryService;
|
private ILibraryService m_LibraryService;
|
||||||
|
|
||||||
private bool m_Enabled;
|
|
||||||
|
|
||||||
private string m_fetchInventoryDescendents2Url;
|
|
||||||
private string m_webFetchInventoryDescendentsUrl;
|
|
||||||
|
|
||||||
private WebFetchInvDescHandler m_webFetchHandler;
|
private WebFetchInvDescHandler m_webFetchHandler;
|
||||||
|
|
||||||
|
private ManualResetEvent m_ev = new ManualResetEvent(true);
|
||||||
|
private object m_lock = new object();
|
||||||
|
|
||||||
|
private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
|
||||||
|
private Dictionary<UUID, Hashtable> m_requests = new Dictionary<UUID, Hashtable>();
|
||||||
|
|
||||||
#region ISharedRegionModule Members
|
#region ISharedRegionModule Members
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
IConfig config = source.Configs["ClientStack.LindenCaps"];
|
|
||||||
if (config == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_fetchInventoryDescendents2Url = config.GetString("Cap_FetchInventoryDescendents2", string.Empty);
|
|
||||||
m_webFetchInventoryDescendentsUrl = config.GetString("Cap_WebFetchInventoryDescendents", string.Empty);
|
|
||||||
|
|
||||||
if (m_fetchInventoryDescendents2Url != string.Empty || m_webFetchInventoryDescendentsUrl != string.Empty)
|
|
||||||
{
|
|
||||||
m_Enabled = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene s)
|
public void AddRegion(Scene s)
|
||||||
{
|
{
|
||||||
if (!m_Enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_scene = s;
|
m_scene = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveRegion(Scene s)
|
public void RemoveRegion(Scene s)
|
||||||
{
|
{
|
||||||
if (!m_Enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
|
m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
|
||||||
|
m_scene.EventManager.OnDeregisterCaps -= DeregisterCaps;
|
||||||
m_scene = null;
|
m_scene = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegionLoaded(Scene s)
|
public void RegionLoaded(Scene s)
|
||||||
{
|
{
|
||||||
if (!m_Enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_InventoryService = m_scene.InventoryService;
|
m_InventoryService = m_scene.InventoryService;
|
||||||
m_LibraryService = m_scene.LibraryService;
|
m_LibraryService = m_scene.LibraryService;
|
||||||
|
|
||||||
// We'll reuse the same handler for all requests.
|
// We'll reuse the same handler for all requests.
|
||||||
if (m_fetchInventoryDescendents2Url == "localhost" || m_webFetchInventoryDescendentsUrl == "localhost")
|
m_webFetchHandler = new WebFetchInvDescHandler(m_InventoryService, m_LibraryService);
|
||||||
m_webFetchHandler = new WebFetchInvDescHandler(m_InventoryService, m_LibraryService);
|
|
||||||
|
|
||||||
m_scene.EventManager.OnRegisterCaps += RegisterCaps;
|
m_scene.EventManager.OnRegisterCaps += RegisterCaps;
|
||||||
|
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
|
@ -128,41 +113,110 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
private void RegisterCaps(UUID agentID, Caps caps)
|
private void RegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
if (m_webFetchInventoryDescendentsUrl != "")
|
string capUrl = "/CAPS/" + UUID.Random() + "/";
|
||||||
RegisterFetchCap(agentID, caps, "WebFetchInventoryDescendents", m_webFetchInventoryDescendentsUrl);
|
|
||||||
|
|
||||||
if (m_fetchInventoryDescendents2Url != "")
|
// Register this as a poll service
|
||||||
RegisterFetchCap(agentID, caps, "FetchInventoryDescendents2", m_fetchInventoryDescendents2Url);
|
PollServiceEventArgs args = new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, agentID, 300000);
|
||||||
|
args.Type = PollServiceEventArgs.EventType.Inventory;
|
||||||
|
MainServer.Instance.AddPollServiceHTTPHandler(capUrl, args);
|
||||||
|
|
||||||
|
string hostName = m_scene.RegionInfo.ExternalHostName;
|
||||||
|
uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port;
|
||||||
|
string protocol = "http";
|
||||||
|
|
||||||
|
if (MainServer.Instance.UseSSL)
|
||||||
|
{
|
||||||
|
hostName = MainServer.Instance.SSLCommonName;
|
||||||
|
port = MainServer.Instance.SSLPort;
|
||||||
|
protocol = "https";
|
||||||
|
}
|
||||||
|
caps.RegisterHandler("FetchInventoryDescendents2", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
|
||||||
|
|
||||||
|
m_capsDict[agentID] = capUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegisterFetchCap(UUID agentID, Caps caps, string capName, string url)
|
private void DeregisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
string capUrl;
|
string capUrl;
|
||||||
|
|
||||||
if (url == "localhost")
|
if (m_capsDict.TryGetValue(agentID, out capUrl))
|
||||||
{
|
{
|
||||||
capUrl = "/CAPS/" + UUID.Random();
|
MainServer.Instance.RemoveHTTPHandler("", capUrl);
|
||||||
|
m_capsDict.Remove(agentID);
|
||||||
IRequestHandler reqHandler
|
|
||||||
= new RestStreamHandler(
|
|
||||||
"POST",
|
|
||||||
capUrl,
|
|
||||||
m_webFetchHandler.FetchInventoryDescendentsRequest,
|
|
||||||
"FetchInventoryDescendents2",
|
|
||||||
agentID.ToString());
|
|
||||||
|
|
||||||
caps.RegisterHandler(capName, reqHandler);
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
capUrl = url;
|
|
||||||
|
|
||||||
caps.RegisterHandler(capName, capUrl);
|
public void HttpRequestHandler(UUID requestID, Hashtable request)
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[FETCH2]: Received request {0}", requestID);
|
||||||
|
m_requests[requestID] = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool HasEvents(UUID requestID, UUID sessionID)
|
||||||
|
{
|
||||||
|
lock (m_lock)
|
||||||
|
{
|
||||||
|
if (m_ev.WaitOne(0))
|
||||||
|
{
|
||||||
|
m_ev.Reset();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Hashtable NoEvents(UUID requestID, UUID sessionID)
|
||||||
|
{
|
||||||
|
m_requests.Remove(requestID);
|
||||||
|
|
||||||
|
Hashtable response = new Hashtable();
|
||||||
|
|
||||||
|
response["int_response_code"] = 500;
|
||||||
|
response["str_response_string"] = "Script timeout";
|
||||||
|
response["content_type"] = "text/plain";
|
||||||
|
response["keepalive"] = false;
|
||||||
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Hashtable GetEvents(UUID requestID, UUID sessionID, string request)
|
||||||
|
{
|
||||||
|
Hashtable response = new Hashtable();
|
||||||
|
|
||||||
|
response["int_response_code"] = 500;
|
||||||
|
response["str_response_string"] = "Internal error";
|
||||||
|
response["content_type"] = "text/plain";
|
||||||
|
response["keepalive"] = false;
|
||||||
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Hashtable requestHash;
|
||||||
|
if (!m_requests.TryGetValue(requestID, out requestHash))
|
||||||
|
{
|
||||||
|
lock (m_lock)
|
||||||
|
m_ev.Set();
|
||||||
|
response["str_response_string"] = "Invalid request";
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[FETCH2]: Processed request {0}", requestID);
|
||||||
|
|
||||||
|
string reply = m_webFetchHandler.FetchInventoryDescendentsRequest(requestHash["body"].ToString(), String.Empty, String.Empty, null, null);
|
||||||
|
|
||||||
|
m_requests.Remove(requestID);
|
||||||
|
|
||||||
|
response["int_response_code"] = 200;
|
||||||
|
response["str_response_string"] = reply;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
lock (m_lock)
|
||||||
|
m_ev.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
return response;
|
||||||
// "[WEB FETCH INV DESC MODULE]: Registered capability {0} at {1} in region {2} for {3}",
|
|
||||||
// capName, capUrl, m_scene.RegionInfo.RegionName, agentID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3809,7 +3809,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (part.ParentGroup.IsAttachment)
|
if (part.ParentGroup.IsAttachment)
|
||||||
{ // Someone else's HUD, why are we getting these?
|
{ // Someone else's HUD, why are we getting these?
|
||||||
if (part.ParentGroup.OwnerID != AgentId &&
|
if (part.ParentGroup.OwnerID != AgentId &&
|
||||||
part.ParentGroup.RootPart.Shape.State >= 30)
|
part.ParentGroup.RootPart.Shape.State > 30)
|
||||||
continue;
|
continue;
|
||||||
ScenePresence sp;
|
ScenePresence sp;
|
||||||
// Owner is not in the sim, don't update it to
|
// Owner is not in the sim, don't update it to
|
||||||
|
|
|
@ -526,10 +526,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
|
|
||||||
public void DetachSingleAttachmentToInv(IScenePresence sp, SceneObjectGroup so)
|
public void DetachSingleAttachmentToInv(IScenePresence sp, SceneObjectGroup so)
|
||||||
{
|
{
|
||||||
// As per Linden spec, detach (take) is disabled for temp attachs
|
|
||||||
if (so.FromItemID == UUID.Zero)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock (sp.AttachmentsSyncLock)
|
lock (sp.AttachmentsSyncLock)
|
||||||
{
|
{
|
||||||
// Save avatar attachment information
|
// Save avatar attachment information
|
||||||
|
@ -1050,7 +1046,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId);
|
ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId);
|
||||||
SceneObjectGroup group = m_scene.GetGroupByPrim(objectLocalID);
|
SceneObjectGroup group = m_scene.GetGroupByPrim(objectLocalID);
|
||||||
|
|
||||||
if (sp != null && group != null)
|
if (sp != null && group != null && group.FromItemID != UUID.Zero)
|
||||||
DetachSingleAttachmentToInv(sp, group);
|
DetachSingleAttachmentToInv(sp, group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1068,7 +1064,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
|
|
||||||
foreach (SceneObjectGroup group in attachments)
|
foreach (SceneObjectGroup group in attachments)
|
||||||
{
|
{
|
||||||
if (group.FromItemID == itemID)
|
if (group.FromItemID == itemID && group.FromItemID != UUID.Zero)
|
||||||
{
|
{
|
||||||
DetachSingleAttachmentToInv(sp, group);
|
DetachSingleAttachmentToInv(sp, group);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -30,8 +30,12 @@ using OpenSim.Framework;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Interfaces
|
namespace OpenSim.Region.Framework.Interfaces
|
||||||
{
|
{
|
||||||
|
public delegate void ConsoleMessage(UUID toAgentID, string message);
|
||||||
|
|
||||||
public interface IRegionConsole
|
public interface IRegionConsole
|
||||||
{
|
{
|
||||||
|
event ConsoleMessage OnConsoleMessage;
|
||||||
|
|
||||||
bool RunCommand(string command, UUID invokerID);
|
bool RunCommand(string command, UUID invokerID);
|
||||||
void SendConsoleOutput(UUID agentID, string message);
|
void SendConsoleOutput(UUID agentID, string message);
|
||||||
void AddCommand(string module, bool shared, string command, string help, string longhelp, CommandDelegate fn);
|
void AddCommand(string module, bool shared, string command, string help, string longhelp, CommandDelegate fn);
|
||||||
|
|
|
@ -1983,6 +1983,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
SceneObjectGroup grp = part.ParentGroup;
|
SceneObjectGroup grp = part.ParentGroup;
|
||||||
|
|
||||||
|
// If child prims have invalid perms, fix them
|
||||||
|
grp.AdjustChildPrimPermissions();
|
||||||
|
|
||||||
if (remoteClient == null)
|
if (remoteClient == null)
|
||||||
{
|
{
|
||||||
// Autoreturn has a null client. Nothing else does. So
|
// Autoreturn has a null client. Nothing else does. So
|
||||||
|
@ -2050,7 +2053,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (Permissions.CanReturnObjects(
|
if (Permissions.CanReturnObjects(
|
||||||
null,
|
null,
|
||||||
remoteClient.AgentId,
|
remoteClient.AgentId,
|
||||||
deleteGroups))
|
new List<SceneObjectGroup>() {grp}))
|
||||||
{
|
{
|
||||||
permissionToTake = true;
|
permissionToTake = true;
|
||||||
permissionToDelete = true;
|
permissionToDelete = true;
|
||||||
|
|
|
@ -215,7 +215,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private int m_update_presences = 1; // Update scene presence movements
|
private int m_update_presences = 1; // Update scene presence movements
|
||||||
private int m_update_events = 1;
|
private int m_update_events = 1;
|
||||||
private int m_update_backup = 200;
|
private int m_update_backup = 200;
|
||||||
private int m_update_terrain = 50;
|
private int m_update_terrain = 1000;
|
||||||
private int m_update_land = 10;
|
private int m_update_land = 10;
|
||||||
private int m_update_coarse_locations = 50;
|
private int m_update_coarse_locations = 50;
|
||||||
|
|
||||||
|
|
|
@ -2852,6 +2852,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Can't do this yet since backup still makes use of the root part without any synchronization
|
// Can't do this yet since backup still makes use of the root part without any synchronization
|
||||||
// objectGroup.m_rootPart = null;
|
// objectGroup.m_rootPart = null;
|
||||||
|
|
||||||
|
// If linking prims with different permissions, fix them
|
||||||
|
AdjustChildPrimPermissions();
|
||||||
|
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
|
|
||||||
// Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the
|
// Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the
|
||||||
|
@ -3306,6 +3309,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="SetVolumeDetect"></param>
|
/// <param name="SetVolumeDetect"></param>
|
||||||
public void UpdatePrimFlags(uint localID, bool UsePhysics, bool SetTemporary, bool SetPhantom, bool SetVolumeDetect)
|
public void UpdatePrimFlags(uint localID, bool UsePhysics, bool SetTemporary, bool SetPhantom, bool SetVolumeDetect)
|
||||||
{
|
{
|
||||||
|
HasGroupChanged = true;
|
||||||
|
|
||||||
SceneObjectPart selectionPart = GetPart(localID);
|
SceneObjectPart selectionPart = GetPart(localID);
|
||||||
|
|
||||||
if (SetTemporary && Scene != null)
|
if (SetTemporary && Scene != null)
|
||||||
|
@ -3389,12 +3394,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AdjustChildPrimPermissions()
|
||||||
|
{
|
||||||
|
ForEachPart(part =>
|
||||||
|
{
|
||||||
|
if (part != RootPart)
|
||||||
|
part.ClonePermissions(RootPart);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdatePermissions(UUID AgentID, byte field, uint localID,
|
public void UpdatePermissions(UUID AgentID, byte field, uint localID,
|
||||||
uint mask, byte addRemTF)
|
uint mask, byte addRemTF)
|
||||||
{
|
{
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF);
|
||||||
for (int i = 0; i < parts.Length; i++)
|
|
||||||
parts[i].UpdatePermissions(AgentID, field, localID, mask, addRemTF);
|
AdjustChildPrimPermissions();
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
|
|
||||||
|
|
|
@ -4487,6 +4487,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ClonePermissions(SceneObjectPart source)
|
||||||
|
{
|
||||||
|
bool update = false;
|
||||||
|
|
||||||
|
if (BaseMask != source.BaseMask ||
|
||||||
|
OwnerMask != source.OwnerMask ||
|
||||||
|
GroupMask != source.GroupMask ||
|
||||||
|
EveryoneMask != source.EveryoneMask ||
|
||||||
|
NextOwnerMask != source.NextOwnerMask)
|
||||||
|
update = true;
|
||||||
|
|
||||||
|
BaseMask = source.BaseMask;
|
||||||
|
OwnerMask = source.OwnerMask;
|
||||||
|
GroupMask = source.GroupMask;
|
||||||
|
EveryoneMask = source.EveryoneMask;
|
||||||
|
NextOwnerMask = source.NextOwnerMask;
|
||||||
|
|
||||||
|
if (update)
|
||||||
|
SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsHingeJoint()
|
public bool IsHingeJoint()
|
||||||
{
|
{
|
||||||
// For now, we use the NINJA naming scheme for identifying joints.
|
// For now, we use the NINJA naming scheme for identifying joints.
|
||||||
|
|
|
@ -386,6 +386,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
m_SOPXmlProcessors.Add("Friction", ProcessFriction);
|
m_SOPXmlProcessors.Add("Friction", ProcessFriction);
|
||||||
m_SOPXmlProcessors.Add("Bounce", ProcessBounce);
|
m_SOPXmlProcessors.Add("Bounce", ProcessBounce);
|
||||||
m_SOPXmlProcessors.Add("GravityModifier", ProcessGravityModifier);
|
m_SOPXmlProcessors.Add("GravityModifier", ProcessGravityModifier);
|
||||||
|
m_SOPXmlProcessors.Add("CameraEyeOffset", ProcessCameraEyeOffset);
|
||||||
|
m_SOPXmlProcessors.Add("CameraAtOffset", ProcessCameraAtOffset);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -639,6 +641,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty);
|
obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ProcessCameraEyeOffset(SceneObjectPart obj, XmlTextReader reader)
|
||||||
|
{
|
||||||
|
obj.SetCameraEyeOffset(Util.ReadVector(reader, "CameraEyeOffset"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ProcessCameraAtOffset(SceneObjectPart obj, XmlTextReader reader)
|
||||||
|
{
|
||||||
|
obj.SetCameraAtOffset(Util.ReadVector(reader, "CameraAtOffset"));
|
||||||
|
}
|
||||||
|
|
||||||
private static void ProcessVehicle(SceneObjectPart obj, XmlTextReader reader)
|
private static void ProcessVehicle(SceneObjectPart obj, XmlTextReader reader)
|
||||||
{
|
{
|
||||||
SOPVehicle vehicle = SOPVehicle.FromXml2(reader);
|
SOPVehicle vehicle = SOPVehicle.FromXml2(reader);
|
||||||
|
@ -1355,6 +1367,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
writer.WriteElementString("Bounce", sop.Bounciness.ToString().ToLower());
|
writer.WriteElementString("Bounce", sop.Bounciness.ToString().ToLower());
|
||||||
if (sop.GravityModifier != 1.0f)
|
if (sop.GravityModifier != 1.0f)
|
||||||
writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower());
|
writer.WriteElementString("GravityModifier", sop.GravityModifier.ToString().ToLower());
|
||||||
|
WriteVector(writer, "CameraEyeOffset", sop.GetCameraEyeOffset());
|
||||||
|
WriteVector(writer, "CameraAtOffset", sop.GetCameraAtOffset());
|
||||||
|
|
||||||
writer.WriteEndElement();
|
writer.WriteEndElement();
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
|
||||||
|
|
||||||
if (m_console != null)
|
if (m_console != null)
|
||||||
{
|
{
|
||||||
m_console.AddCommand("TempATtachModule", false, "set auto_grant_attach_perms", "set auto_grant_attach_perms true|false", "Allow objects owned by the region owner os estate managers to obtain attach permissions without asking the user", SetAutoGrantAttachPerms);
|
m_console.AddCommand("TempAttachModule", false, "set auto_grant_attach_perms", "set auto_grant_attach_perms true|false", "Allow objects owned by the region owner os estate managers to obtain attach permissions without asking the user", SetAutoGrantAttachPerms);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -6090,6 +6090,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
flags |= ScriptBaseClass.AGENT_AWAY;
|
flags |= ScriptBaseClass.AGENT_AWAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UUID busy = new UUID("efcf670c-2d18-8128-973a-034ebc806b67");
|
||||||
|
UUID[] anims = agent.Animator.GetAnimationArray();
|
||||||
|
if (Array.Exists<UUID>(anims, a => { return a == busy; }))
|
||||||
|
{
|
||||||
|
flags |= ScriptBaseClass.AGENT_BUSY;
|
||||||
|
}
|
||||||
|
|
||||||
// seems to get unset, even if in mouselook, when avatar is sitting on a prim???
|
// seems to get unset, even if in mouselook, when avatar is sitting on a prim???
|
||||||
if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0)
|
if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0)
|
||||||
{
|
{
|
||||||
|
@ -7778,10 +7785,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
remaining = SetPrimParams((ScenePresence)part, rules);
|
remaining = SetPrimParams((ScenePresence)part, rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
while((object)remaining != null && remaining.Length > 2)
|
while ((object)remaining != null && remaining.Length > 2)
|
||||||
{
|
{
|
||||||
linknumber = remaining.GetLSLIntegerItem(0);
|
linknumber = remaining.GetLSLIntegerItem(0);
|
||||||
rules = remaining.GetSublist(1,-1);
|
rules = remaining.GetSublist(1, -1);
|
||||||
parts.Clear();
|
parts.Clear();
|
||||||
prims = GetLinkParts(linknumber);
|
prims = GetLinkParts(linknumber);
|
||||||
avatars = GetLinkAvatars(linknumber);
|
avatars = GetLinkAvatars(linknumber);
|
||||||
|
@ -7790,6 +7797,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
foreach (ScenePresence p in avatars)
|
foreach (ScenePresence p in avatars)
|
||||||
parts.Add(p);
|
parts.Add(p);
|
||||||
|
|
||||||
|
remaining = null;
|
||||||
foreach (object part in parts)
|
foreach (object part in parts)
|
||||||
{
|
{
|
||||||
if (part is SceneObjectPart)
|
if (part is SceneObjectPart)
|
||||||
|
|
Loading…
Reference in New Issue