mirror of
https://github.com/opensim/opensim.git
synced 2026-08-10 03:06:05 +08:00
Merge branch 'master' into careminster
This commit is contained in:
@@ -191,7 +191,5 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
/// A <see cref="Dictionary`2"/>
|
||||
/// </returns>
|
||||
Dictionary<UUID, string> GetScriptStates();
|
||||
|
||||
bool CanBeDeleted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
string ScriptEngineName { get; }
|
||||
|
||||
string GetXMLState(UUID itemID);
|
||||
bool CanBeDeleted(UUID itemID);
|
||||
void SetXMLState(UUID itemID, string xml);
|
||||
|
||||
bool PostScriptEvent(UUID itemID, string name, Object[] args);
|
||||
bool PostObjectEvent(UUID itemID, string name, Object[] args);
|
||||
|
||||
@@ -247,8 +247,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
else if (m_movementAnimation == "LAND")
|
||||
{
|
||||
float landElapsed = (float)(Environment.TickCount - m_animTickFall) / 1000f;
|
||||
|
||||
if (landElapsed <= FALL_DELAY)
|
||||
if ((m_animTickFall != 0) && (landElapsed <= FALL_DELAY))
|
||||
return "LAND";
|
||||
}
|
||||
|
||||
|
||||
@@ -131,11 +131,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
if (left > 0)
|
||||
{
|
||||
x = m_inventoryDeletes.Dequeue();
|
||||
if (!x.objectGroup.CanBeDeleted())
|
||||
{
|
||||
m_inventoryDeletes.Enqueue(x);
|
||||
return true;
|
||||
}
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[SCENE]: Sending object to user's inventory, {0} item(s) remaining.", left);
|
||||
|
||||
@@ -618,7 +618,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
startupConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE);
|
||||
m_persistAfter *= 10000000;
|
||||
|
||||
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "DotNetEngine");
|
||||
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "XEngine");
|
||||
|
||||
IConfig packetConfig = m_config.Configs["PacketPool"];
|
||||
if (packetConfig != null)
|
||||
|
||||
@@ -351,12 +351,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return xmldoc.InnerXml;
|
||||
}
|
||||
|
||||
public void SetState(string objXMLData, UUID RegionID)
|
||||
public void SetState(string objXMLData, IScene ins)
|
||||
{
|
||||
m_log.Debug("SetState called with " + objXMLData);
|
||||
if (!(ins is Scene))
|
||||
return;
|
||||
|
||||
Scene s = (Scene)ins;
|
||||
|
||||
if (objXMLData == String.Empty)
|
||||
return;
|
||||
|
||||
IScriptModule scriptModule = null;
|
||||
|
||||
foreach (IScriptModule sm in s.RequestModuleInterfaces<IScriptModule>())
|
||||
{
|
||||
if (sm.ScriptEngineName == s.DefaultScriptEngine)
|
||||
scriptModule = sm;
|
||||
else if (scriptModule == null)
|
||||
scriptModule = sm;
|
||||
}
|
||||
|
||||
if (scriptModule == null)
|
||||
return;
|
||||
|
||||
XmlDocument doc = new XmlDocument();
|
||||
try
|
||||
{
|
||||
@@ -374,69 +391,23 @@ m_log.Debug("SetState called with " + objXMLData);
|
||||
}
|
||||
|
||||
XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
|
||||
if (rootL.Count == 1)
|
||||
if (rootL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement rootE = (XmlElement)rootL[0];
|
||||
|
||||
XmlNodeList dataL = rootE.GetElementsByTagName("ScriptStates");
|
||||
if (dataL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement dataE = (XmlElement)dataL[0];
|
||||
|
||||
foreach (XmlNode n in dataE.ChildNodes)
|
||||
{
|
||||
XmlNode rootNode = rootL[0];
|
||||
if (rootNode != null)
|
||||
{
|
||||
XmlNodeList partL = rootNode.ChildNodes;
|
||||
XmlElement stateE = (XmlElement)n;
|
||||
UUID itemID = new UUID(stateE.GetAttribute("UUID"));
|
||||
|
||||
foreach (XmlNode part in partL)
|
||||
{
|
||||
XmlNodeList nodeL = part.ChildNodes;
|
||||
|
||||
switch (part.Name)
|
||||
{
|
||||
case "Assemblies":
|
||||
foreach (XmlNode asm in nodeL)
|
||||
{
|
||||
string fn = asm.Attributes.GetNamedItem("Filename").Value;
|
||||
|
||||
Byte[] filedata = Convert.FromBase64String(asm.InnerText);
|
||||
string path = Path.Combine("ScriptEngines", RegionID.ToString());
|
||||
path = Path.Combine(path, fn);
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
FileStream fs = File.Create(path);
|
||||
fs.Write(filedata, 0, filedata.Length);
|
||||
fs.Close();
|
||||
|
||||
Byte[] textbytes = new System.Text.ASCIIEncoding().GetBytes(asm.InnerText);
|
||||
fs = File.Create(path+".text");
|
||||
fs.Write(textbytes, 0, textbytes.Length);
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "ScriptStates":
|
||||
foreach (XmlNode st in nodeL)
|
||||
{
|
||||
string id = st.Attributes.GetNamedItem("UUID").Value;
|
||||
UUID uuid = new UUID(id);
|
||||
XmlNode state = st.ChildNodes[0];
|
||||
|
||||
XmlDocument sdoc = new XmlDocument();
|
||||
XmlNode sxmlnode = sdoc.CreateNode(
|
||||
XmlNodeType.XmlDeclaration,
|
||||
"", "");
|
||||
sdoc.AppendChild(sxmlnode);
|
||||
|
||||
XmlNode newnode = sdoc.ImportNode(state, true);
|
||||
sdoc.AppendChild(newnode);
|
||||
|
||||
string spath = Path.Combine("ScriptEngines", RegionID.ToString());
|
||||
spath = Path.Combine(spath, uuid.ToString());
|
||||
FileStream sfs = File.Create(spath + ".state");
|
||||
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
||||
Byte[] buf = enc.GetBytes(sdoc.InnerXml);
|
||||
sfs.Write(buf, 0, buf.Length);
|
||||
sfs.Close();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
scriptModule.SetXMLState(itemID, n.OuterXml);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3380,17 +3380,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
#endregion
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
foreach (SceneObjectPart part in Children.Values)
|
||||
{
|
||||
if (!part.CanBeDeleted())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public double GetUpdatePriority(IClientAPI client)
|
||||
{
|
||||
switch (Scene.UpdatePrioritizationScheme)
|
||||
|
||||
@@ -3807,10 +3807,5 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
Inventory.ApplyNextOwnerPermissions();
|
||||
}
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
return Inventory.CanBeDeleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -909,30 +909,5 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
if (!ContainsScripts())
|
||||
return true;
|
||||
|
||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||
|
||||
if (engines == null) // No engine at all
|
||||
return true;
|
||||
|
||||
foreach (TaskInventoryItem item in m_items.Values)
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
foreach (IScriptModule e in engines)
|
||||
{
|
||||
if (!e.CanBeDeleted(item.ItemID))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user