aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs99
1 files changed, 35 insertions, 64 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 9a6f2b8..5a06bdb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -351,12 +351,29 @@ namespace OpenSim.Region.Framework.Scenes
351 return xmldoc.InnerXml; 351 return xmldoc.InnerXml;
352 } 352 }
353 353
354 public void SetState(string objXMLData, UUID RegionID) 354 public void SetState(string objXMLData, IScene ins)
355 { 355 {
356m_log.Debug("SetState called with " + objXMLData); 356 if (!(ins is Scene))
357 return;
358
359 Scene s = (Scene)ins;
360
357 if (objXMLData == String.Empty) 361 if (objXMLData == String.Empty)
358 return; 362 return;
359 363
364 IScriptModule scriptModule = null;
365
366 foreach (IScriptModule sm in s.RequestModuleInterfaces<IScriptModule>())
367 {
368 if (sm.ScriptEngineName == s.DefaultScriptEngine)
369 scriptModule = sm;
370 else if (scriptModule == null)
371 scriptModule = sm;
372 }
373
374 if (scriptModule == null)
375 return;
376
360 XmlDocument doc = new XmlDocument(); 377 XmlDocument doc = new XmlDocument();
361 try 378 try
362 { 379 {
@@ -374,69 +391,23 @@ m_log.Debug("SetState called with " + objXMLData);
374 } 391 }
375 392
376 XmlNodeList rootL = doc.GetElementsByTagName("ScriptData"); 393 XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
377 if (rootL.Count == 1) 394 if (rootL.Count != 1)
395 return;
396
397 XmlElement rootE = (XmlElement)rootL[0];
398
399 XmlNodeList dataL = rootE.GetElementsByTagName("ScriptStates");
400 if (dataL.Count != 1)
401 return;
402
403 XmlElement dataE = (XmlElement)dataL[0];
404
405 foreach (XmlNode n in dataE.ChildNodes)
378 { 406 {
379 XmlNode rootNode = rootL[0]; 407 XmlElement stateE = (XmlElement)n;
380 if (rootNode != null) 408 UUID itemID = new UUID(stateE.GetAttribute("UUID"));
381 { 409
382 XmlNodeList partL = rootNode.ChildNodes; 410 scriptModule.SetXMLState(itemID, n.OuterXml);
383
384 foreach (XmlNode part in partL)
385 {
386 XmlNodeList nodeL = part.ChildNodes;
387
388 switch (part.Name)
389 {
390 case "Assemblies":
391 foreach (XmlNode asm in nodeL)
392 {
393 string fn = asm.Attributes.GetNamedItem("Filename").Value;
394
395 Byte[] filedata = Convert.FromBase64String(asm.InnerText);
396 string path = Path.Combine("ScriptEngines", RegionID.ToString());
397 path = Path.Combine(path, fn);
398
399 if (!File.Exists(path))
400 {
401 FileStream fs = File.Create(path);
402 fs.Write(filedata, 0, filedata.Length);
403 fs.Close();
404
405 Byte[] textbytes = new System.Text.ASCIIEncoding().GetBytes(asm.InnerText);
406 fs = File.Create(path+".text");
407 fs.Write(textbytes, 0, textbytes.Length);
408 fs.Close();
409 }
410 }
411 break;
412 case "ScriptStates":
413 foreach (XmlNode st in nodeL)
414 {
415 string id = st.Attributes.GetNamedItem("UUID").Value;
416 UUID uuid = new UUID(id);
417 XmlNode state = st.ChildNodes[0];
418
419 XmlDocument sdoc = new XmlDocument();
420 XmlNode sxmlnode = sdoc.CreateNode(
421 XmlNodeType.XmlDeclaration,
422 "", "");
423 sdoc.AppendChild(sxmlnode);
424
425 XmlNode newnode = sdoc.ImportNode(state, true);
426 sdoc.AppendChild(newnode);
427
428 string spath = Path.Combine("ScriptEngines", RegionID.ToString());
429 spath = Path.Combine(spath, uuid.ToString());
430 FileStream sfs = File.Create(spath + ".state");
431 System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
432 Byte[] buf = enc.GetBytes(sdoc.InnerXml);
433 sfs.Write(buf, 0, buf.Length);
434 sfs.Close();
435 }
436 break;
437 }
438 }
439 }
440 } 411 }
441 } 412 }
442 } 413 }