From cd6efb75536c6c3a97efd3c0c16e3b2c766387da Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 26 Nov 2024 18:34:26 +0000 Subject: [PATCH] persist start string parameter (from rezobject) --- OpenSim/Data/MySQL/MySQLSimulationData.cs | 8 ++++++-- .../Data/MySQL/Resources/RegionStore.migrations | 5 +++++ OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 15 ++++++++++++--- .../Data/PGSQL/Resources/RegionStore.migrations | 5 +++++ .../Data/SQLite/Resources/RegionStore.migrations | 5 +++++ OpenSim/Data/SQLite/SQLiteSimulationData.cs | 11 ++++++++++- .../Scenes/Serialization/SceneObjectSerializer.cs | 15 +++++++++++++++ 7 files changed, 58 insertions(+), 6 deletions(-) diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs index b3e39811b3..ed70781f8a 100644 --- a/OpenSim/Data/MySQL/MySQLSimulationData.cs +++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs @@ -171,7 +171,7 @@ namespace OpenSim.Data.MySQL "PhysicsShapeType, Density, GravityModifier, " + "Friction, Restitution, Vehicle, PhysInertia, DynAttrs, " + "RotationAxisLocks, sopanims, sitactrange, pseudocrc, " + - "lnkstBinData" + + "lnkstBinData, StartStr" + ") values (" + "?UUID, " + "?CreationDate, ?Name, ?Text, " + "?Description, ?SitName, ?TouchName, " + @@ -207,7 +207,7 @@ namespace OpenSim.Data.MySQL "?PhysicsShapeType, ?Density, ?GravityModifier, " + "?Friction, ?Restitution, ?Vehicle, ?PhysInertia, ?DynAttrs, " + "?RotationAxisLocks, ?sopanims, ?sitactrange, ?pseudocrc, " + - "?lnkstBinData)"; + "?lnkstBinData, ?StartStr)"; FillPrimCommand(cmd, prim, obj.UUID, regionUUID); @@ -362,6 +362,10 @@ namespace OpenSim.Data.MySQL byte[] data = (byte[])reader["lnkstBinData"]; newSog.LinksetData = LinksetData.FromBin(data); } + if(reader["StartStr"] is not DBNull) + { + newSog.RezStringParameter = (string)reader["StartStr"]; + } } else m_log.Warn($"[REGION DB]: duplicated SOG with root prim \"{prim.Name}\" {prim.UUID} in region {regionID}"); diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations index b2c3357c6d..9def74c4a2 100644 --- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations @@ -567,3 +567,8 @@ ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR2` varchar(36) NOT NULL DEFAU ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR3` varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR4` varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; COMMIT; + +:VERSION 67 #----- add rez start string param column +BEGIN; +ALTER TABLE `prims` ADD COLUMN `StartStr` text default NULL; +COMMIT; diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs index 931459aa74..54eb932878 100755 --- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs +++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs @@ -163,6 +163,10 @@ namespace OpenSim.Data.PGSQL byte[] data = (byte[])reader["lnkstBinData"]; grp.LinksetData = LinksetData.FromBin(data); } + if(reader["StartStr"] is not DBNull) + { + grp.RezStringParameter = (string)reader["StartStr"]; + } } else { @@ -352,7 +356,7 @@ namespace OpenSim.Data.PGSQL ""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches, ""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs, ""Vehicle"" = :Vehicle, ""PhysInertia"" = :PhysInertia, ""standtargetx"" =:standtargetx, ""standtargety"" =:standtargety, ""standtargetz"" =:standtargetz, - ""sitactrange"" =:sitactrange, ""pseudocrc"" = :pseudocrc, ""sopanims"" = :sopanims, ""lnkstBinData"" = :lnkstBinData + ""sitactrange"" =:sitactrange, ""pseudocrc"" = :pseudocrc, ""sopanims"" = :sopanims, ""lnkstBinData"" = :lnkstBinData, ""StartStr"" = :StartStr WHERE ""UUID"" = :UUID ; @@ -368,7 +372,7 @@ namespace OpenSim.Data.PGSQL ""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"", ""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"", ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"", ""PassCollisions"", ""RotationAxisLocks"", ""RezzerID"" , ""Vehicle"", ""PhysInertia"", - ""standtargetx"", ""standtargety"", ""standtargetz"", ""sitactrange"", ""pseudocrc"",""sopanims"",""lnkstBinData"" + ""standtargetx"", ""standtargety"", ""standtargetz"", ""sitactrange"", ""pseudocrc"",""sopanims"",""lnkstBinData"", ""StartStr"" ) Select :UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask, :EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX, @@ -380,7 +384,7 @@ namespace OpenSim.Data.PGSQL :ForceMouselook, :ScriptAccessPin, :AllowedDrop, :DieAtEdge, :SalePrice, :SaleType, :ColorR, :ColorG, :ColorB, :ColorA, :ParticleSystem, :ClickAction, :Material, :CollisionSound, :CollisionSoundVolume, :PassTouches, :LinkNumber, :MediaURL, :DynAttrs, :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution, :PassCollisions, :RotationAxisLocks, :RezzerID, :Vehicle, :PhysInertia, - :standtargetx, :standtargety, :standtargetz,:sitactrange, :pseudocrc, :sopanims, :lnkstBinData + :standtargetx, :standtargety, :standtargetz,:sitactrange, :pseudocrc, :sopanims, :lnkstBinData, :StartStr where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID); "; @@ -1883,6 +1887,11 @@ namespace OpenSim.Data.PGSQL else parameters.Add(_Database.CreateParameterNullBytea("lnkstBinData")); + if(prim.IsRoot) + parameters.Add(_Database.CreateParameter("StartStr", prim.ParentGroup.RezStringParameter)); + else + parameters.Add(_Database.CreateParameter("StartStr", null)); + return parameters.ToArray(); } diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index bde59a7c29..b5653bd878 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1304,3 +1304,8 @@ CREATE TABLE "regionextra" PRIMARY KEY ("RegionID", "Name") ); COMMIT; + +:VERSION 58 #----- add rez start string param column +BEGIN; +ALTER TABLE `prims` ADD COLUMN `StartStr` TEXT; +COMMIT; diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations index 11a09e570c..c3164ea119 100644 --- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations +++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations @@ -419,3 +419,8 @@ ALTER TABLE regionsettings ADD COLUMN TerrainPBR2 char(36) NOT NULL DEFAULT '000 ALTER TABLE regionsettings ADD COLUMN TerrainPBR3 char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; ALTER TABLE regionsettings ADD COLUMN TerrainPBR4 char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; COMMIT; + +:VERSION 43 #----- add rez start string param column +BEGIN; +ALTER TABLE `prims` ADD COLUMN `StartStr` TEXT; +COMMIT; diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index 7ca7d1fd3c..f6db50c0ee 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs @@ -662,7 +662,10 @@ namespace OpenSim.Data.SQLite byte[] data = (byte[])primRow["lnkstBinData"]; group.LinksetData = LinksetData.FromBin(data); } - + if(primRow["StartStr"] is not DBNull) + { + group.RezStringParameter = (string)primRow["StartStr"]; + } createdObjects.Add(group.UUID, group); retvals.Add(group); LoadItems(prim); @@ -1251,6 +1254,7 @@ namespace OpenSim.Data.SQLite createCol(prims, "sopanims", typeof(byte[])); createCol(prims, "lnkstBinData", typeof(byte[])); + createCol(prims, "StartStr", typeof(string)); // Add in contraints prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] }; @@ -2217,6 +2221,11 @@ namespace OpenSim.Data.SQLite row["lnkstBinData"] = prim.ParentGroup.LinksetData.ToBin(); else row["lnkstBinData"] = null; + + if (prim.IsRoot) + row["StartSrc"] = prim.ParentGroup.RezStringParameter; + else + row["StartSrc"] = null; } /// diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index d4f9f1635b..fc52889754 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -151,6 +151,11 @@ namespace OpenSim.Region.Framework.Scenes.Serialization sceneObject.LinksetData = LinksetData.FromXML(innerlnkstdttxt.AsSpan()); } + if (reader.Name == "StartStr" && reader.NodeType == XmlNodeType.Element) + { + sceneObject.RezStringParameter = reader.ReadElementContentAsString(); + } + // Script state may, or may not, exist. Not having any, is NOT // ever a problem. sceneObject.LoadScriptState(reader); @@ -260,6 +265,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization writer.WriteEndElement(); } + if(sceneObject.RezStringParameter is not null) + writer.WriteElementString("StartStr", sceneObject.RezStringParameter); + sceneObject.LinksetData?.ToXML(writer); if (doScriptStates) @@ -337,6 +345,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization if (keylinksetdata.Count > 0) sceneObject.LinksetData = LinksetData.FromXML(keylinksetdata[0].InnerText.AsSpan()); + XmlNodeList StartStr = doc.GetElementsByTagName("StartStr"); + if (StartStr.Count > 0) + sceneObject.RezStringParameter = StartStr[0].InnerText; + // Script state may, or may not, exist. Not having any, is NOT // ever a problem. sceneObject.LoadScriptState(doc); @@ -1519,6 +1531,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization writer.WriteEndElement(); } + if(sog.RezStringParameter is not null) + writer.WriteElementString("StartStr", sog.RezStringParameter); + sog.LinksetData?.ToXML(writer); writer.WriteEndElement();