mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 03:45:35 +08:00
Change attachment handling to remove object from the scene first as per
justincc's original work. Sample scripts before doing so. Also refactor some crucial common code and eliminate parameters that were only ever used with the same constant value.
This commit is contained in:
@@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
/// <param name="sp">The presence closing</param>
|
||||
/// <param name="saveChanged">Save changed attachments.</param>
|
||||
/// <param name="saveAllScripted">Save attachments with scripts even if they haven't changed.</para>
|
||||
void DeRezAttachments(IScenePresence sp, bool saveChanged, bool saveAllScripted);
|
||||
void DeRezAttachments(IScenePresence sp);
|
||||
|
||||
/// <summary>
|
||||
/// Delete all the presence's attachments from the scene
|
||||
|
||||
@@ -40,6 +40,8 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
/// </remarks>
|
||||
public interface IScenePresence : ISceneAgent
|
||||
{
|
||||
PresenceType PresenceType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Copy of the script states while the agent is in transit. This state may
|
||||
/// need to be placed back in case of transfer fail.
|
||||
@@ -83,4 +85,4 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
void RemoveAttachment(SceneObjectGroup gobj);
|
||||
void ClearAttachments();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3297,17 +3297,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (AttachmentsModule != null)
|
||||
{
|
||||
// Don't save attachments for HG visitors, it
|
||||
// messes up their inventory. When a HG visitor logs
|
||||
// out on a foreign grid, their attachments will be
|
||||
// reloaded in the state they were in when they left
|
||||
// the home grid. This is best anyway as the visited
|
||||
// grid may use an incompatible script engine.
|
||||
bool saveChanged
|
||||
= avatar.PresenceType != PresenceType.Npc
|
||||
&& (UserManagementModule == null || UserManagementModule.IsLocalGridUser(avatar.UUID));
|
||||
|
||||
AttachmentsModule.DeRezAttachments(avatar, saveChanged, false);
|
||||
AttachmentsModule.DeRezAttachments(avatar);
|
||||
}
|
||||
|
||||
ForEachClient(
|
||||
|
||||
@@ -151,6 +151,24 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||
ToOriginalXmlFormat(sceneObject, writer, doScriptStates, false);
|
||||
}
|
||||
|
||||
public static string ToOriginalXmlFormat(SceneObjectGroup sceneObject, string scriptedState)
|
||||
{
|
||||
using (StringWriter sw = new StringWriter())
|
||||
{
|
||||
using (XmlTextWriter writer = new XmlTextWriter(sw))
|
||||
{
|
||||
writer.WriteStartElement(String.Empty, "SceneObjectGroup", String.Empty);
|
||||
|
||||
ToOriginalXmlFormat(sceneObject, writer, false, true);
|
||||
|
||||
writer.WriteRaw(scriptedState);
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
return sw.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serialize a scene object to the original xml format
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user