From 37d37665bf6bddc8f8ba9e75b8b1f53c65b0b304 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 19 Jun 2024 11:13:09 +0100 Subject: [PATCH 01/14] fix sqlite migration --- OpenSim/Data/SQLite/Resources/RegionStore.migrations | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations index 92d046e6b5..11a09e570c 100644 --- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations +++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations @@ -414,8 +414,8 @@ COMMIT; :VERSION 42 #----- add pbr terrain storage BEGIN; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR1` char(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR2` char(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR3` char(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR4` char(36) NOT NULL; +ALTER TABLE regionsettings ADD COLUMN TerrainPBR1 char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +ALTER TABLE regionsettings ADD COLUMN TerrainPBR2 char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +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; From c4635d86d048d5ff447f42697e855c1fbbf97301 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 19 Jun 2024 20:22:43 +0100 Subject: [PATCH 02/14] llSetCameraAtOffset() or llSetCameraEyeOffset() on a child prim do not mess root prim ( reverts 174df941720bc45c1e73224919c34f059129b9e1) --- .../ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 9fb07d5bcb..943279a9f5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -7788,17 +7788,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetCameraEyeOffset(LSL_Vector offset) { m_host.SetCameraEyeOffset(offset); - - if (m_host.ParentGroup.RootPart.GetCameraEyeOffset().IsZero()) - m_host.ParentGroup.RootPart.SetCameraEyeOffset(offset); } public void llSetCameraAtOffset(LSL_Vector offset) { m_host.SetCameraAtOffset(offset); - - if (m_host.ParentGroup.RootPart.GetCameraAtOffset().IsZero()) - m_host.ParentGroup.RootPart.SetCameraAtOffset(offset); } public void llSetLinkCamera(LSL_Integer link, LSL_Vector eye, LSL_Vector at) From 583cc04910b537804b00f9e2374db31e8a71f7bf Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 23 Jun 2024 21:50:32 +0100 Subject: [PATCH 03/14] also add default uuid zero string to mysql and pgsql pbr entries --- OpenSim/Data/MySQL/Resources/RegionStore.migrations | 8 ++++---- OpenSim/Data/PGSQL/Resources/RegionStore.migrations | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations index 1e949c6a89..e6aa016b2b 100644 --- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations @@ -562,8 +562,8 @@ COMMIT; :VERSION 66 #----- add PBR Terrain storage column BEGIN; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR1` varchar(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR2` varchar(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR3` varchar(36) NOT NULL; -ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR4` varchar(36) NOT NULL; +ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR1` varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +ALTER TABLE `regionsettings` ADD COLUMN `TerrainPBR2` varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +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; \ No newline at end of file diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index 0c89495036..7b86e28f04 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1262,8 +1262,8 @@ COMMIT; :VERSION 54 #----- add pbr terrain storage BEGIN; -ALTER TABLE regionsettings ADD COLUMN "TerrainPBR1" uuid NOT NULL; -ALTER TABLE regionsettings ADD COLUMN "TerrainPBR2" uuid NOT NULL; -ALTER TABLE regionsettings ADD COLUMN "TerrainPBR3" uuid NOT NULL; -ALTER TABLE regionsettings ADD COLUMN "TerrainPBR4" uuid NOT NULL; +ALTER TABLE regionsettings ADD COLUMN "TerrainPBR1" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +ALTER TABLE regionsettings ADD COLUMN "TerrainPBR2" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +ALTER TABLE regionsettings ADD COLUMN "TerrainPBR3" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; +ALTER TABLE regionsettings ADD COLUMN "TerrainPBR4" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; COMMIT; From cc1227364c90e50e714f84a880976f20dd42b851 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 23 Jun 2024 21:54:46 +0100 Subject: [PATCH 04/14] add llDerezObject(..) --- .../Shared/Api/Implementation/LSL_Api.cs | 31 +++++++++++++++++++ .../Shared/Api/Interface/ILSL_Api.cs | 1 + .../Shared/Api/Runtime/LSL_Stub.cs | 8 ++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 943279a9f5..c70588e2e6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -18762,6 +18762,37 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return 0; } + + public LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag) + { + if (!UUID.TryParse(objectUUID, out UUID objUUID)) + return new LSL_Integer(0); + + if (objUUID.IsZero()) + return new LSL_Integer(0); + + SceneObjectGroup sceneOG = World.GetSceneObjectGroup(objUUID); + + if (sceneOG is null || sceneOG.IsDeleted || sceneOG.IsAttachment) + return new LSL_Integer(0); + + if (sceneOG.OwnerID.NotEqual(m_host.OwnerID)) + return new LSL_Integer(0); + + // restrict to objects rezzed by host + if (sceneOG.RezzerID.NotEqual(m_host.ParentGroup.UUID)) + return new LSL_Integer(0); + + if (sceneOG.UUID.Equals(m_host.ParentGroup.UUID)) + return new LSL_Integer(0); + + if (flag.value == 0) + World.DeleteSceneObject(sceneOG, false); + else + sceneOG.RootPart.AddFlag(PrimFlags.TemporaryOnRez); + + return new LSL_Integer(1); + } } public class NotecardCache diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 325f342e0e..3290620c59 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs @@ -521,5 +521,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_Integer llLinksetDataWriteProtected(LSL_String name, LSL_String value, LSL_String pass); LSL_Integer llIsFriend(LSL_Key agent_id); + LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 41effdfec5..b34cce4f70 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -2796,11 +2796,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { return m_LSL_Functions.llLinksetDataFindKeys(pattern, start, count); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public LSL_Integer llIsFriend(LSL_Key agent_id) { return m_LSL_Functions.llIsFriend(agent_id); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_Integer llDerezObject(LSL_Key objectUUID, LSL_Integer flag) + { + return m_LSL_Functions.llDerezObject(objectUUID, flag); + } } } From 0923ed6f4dbe57be07578f0b53ab3962cde5c231 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 23 Jun 2024 21:58:00 +0100 Subject: [PATCH 05/14] update ScriptSyntax --- bin/ScriptSyntax.xml | 357 ++++++++++++++++++++++++------------------- 1 file changed, 197 insertions(+), 160 deletions(-) diff --git a/bin/ScriptSyntax.xml b/bin/ScriptSyntax.xml index 7fd233bd84..f8f469947b 100644 --- a/bin/ScriptSyntax.xml +++ b/bin/ScriptSyntax.xml @@ -1,4 +1,4 @@ -9a2d5a5e-484a-40b0-82bc-092443b08ff7 +4782a83e-4ec0-2ed4-2d2a-c59df5a3ccf0 llsd-lsl-syntax-version2 controls @@ -1714,7 +1714,7 @@ OS_APIVERSION typeinteger - value22 + value23 OS_ATTACH_MSG_ALL typeinteger @@ -3615,6 +3615,7 @@ arguments valtypeinteger + tooltipReturns absolute version as val (ie as postive value) llAcos @@ -3622,6 +3623,7 @@ arguments valtypefloat + tooltipReturns cosine of val (val in radians) llAddToLandBanList @@ -3680,14 +3682,16 @@ arguments valtypefloat + tooltipReturns sine of val (val in radians) llAtan2 returnfloat arguments - xtypefloat ytypefloat + xtypefloat + tooltipReturns the angle whose tangent is the y/x llAttachToAvatar @@ -3873,6 +3877,14 @@ endtypeinteger + llDerezObject + + returninteger + arguments + objectUUIDtypekey + flagtypeinteger + + llDetachFromAvatar arguments @@ -4165,6 +4177,16 @@ objtypestring + llGetCameraAspect + + returnfloat + arguments + + llGetCameraFOV + + returnfloat + arguments + llGetCameraPos returnvector @@ -5009,7 +5031,6 @@ linknumbertypeinteger soundtypestring volumetypefloat - flagstypeinteger llLinkPlaySound @@ -5018,6 +5039,7 @@ linknumbertypeinteger soundtypestring volumetypefloat + flagstypeinteger llLinksetDataAvailable @@ -6783,6 +6805,40 @@ volumetypefloat + osAESDecrypt + + returnstring + arguments + secrettypestring + encryptedTexttypestring + + + osAESDecryptFrom + + returnstring + arguments + secrettypestring + encryptedTexttypestring + ivStringtypestring + + + osAESEncrypt + + returnstring + arguments + secrettypestring + plainTexttypestring + + + osAESEncryptTo + + returnstring + arguments + secrettypestring + plainTexttypestring + ivStringtypestring + + osAgentSaveAppearance returnkey @@ -6809,15 +6865,6 @@ osApproxEquals - - returninteger - arguments - ratyperotation - rbtyperotation - margintypefloat - - - osApproxEquals returninteger arguments @@ -6827,11 +6874,29 @@ osApproxEquals + + returninteger + arguments + ratyperotation + rbtyperotation + margintypefloat + + + osApproxEquals + + returninteger + arguments + ratyperotation + rbtyperotation + + + osApproxEquals returninteger arguments vatypevector vbtypevector + margintypefloat osApproxEquals @@ -6848,15 +6913,6 @@ arguments vatypevector vbtypevector - margintypefloat - - - osApproxEquals - - returninteger - arguments - ratyperotation - rbtyperotation osAvatarName2Key @@ -6885,15 +6941,15 @@ returninteger arguments - sFirstNametypestring - sLastNametypestring + avkeytypekey osAvatarType returninteger arguments - avkeytypekey + sFirstNametypestring + sLastNametypestring osCauseDamage @@ -7002,6 +7058,8 @@ returnstring arguments drawListtypestring + startXtypeinteger + startYtypeinteger endXtypeinteger endYtypeinteger @@ -7011,8 +7069,6 @@ returnstring arguments drawListtypestring - startXtypeinteger - startYtypeinteger endXtypeinteger endYtypeinteger @@ -7303,14 +7359,6 @@ itemNameOrIdtypestring - osGetLinkInventoryDesc - - returnstring - arguments - linkNumbertypeinteger - itemNameOrIdtypestring - - osGetInventoryItemKey returnkey @@ -7318,23 +7366,6 @@ nametypestring -osGetLinkInventoryAssetKey - - returnkey - arguments - linkNumbertypeinteger - nametypestring - typetypeinteger - - -osGetLinkInventoryItemKey - - returnkey - arguments - linkNumbertypeinteger - nametypestring - - osGetInventoryItemKeys returnlist @@ -7363,6 +7394,52 @@ typetypeinteger + osGetLastChangedEventKey + + returnkey + arguments + + osGetLinkColor + + returnvector + arguments + linknumtypeinteger + facetypeinteger + + + osGetLinkInventoryDesc + + returnstring + arguments + linkNumbertypeinteger + itemNameoridtypestring + + + osGetLinkInventoryItemKey + + returnkey + arguments + linkNumbertypeinteger + nametypestring + + + osGetLinkInventoryItemKeys + + returnlist + arguments + linkNumbertypeinteger + typetypeinteger + + + osGetLinkInventoryKey + + returnkey + arguments + linkNumbertypeinteger + nametypestring + typetypeinteger + + osGetLinkInventoryName returnstring @@ -7379,43 +7456,6 @@ typetypeinteger - osGetLinkInventoryItemKeys - - returnlist - arguments - linkNumbertypeinteger - typetypeinteger - - - osRemoveLinkInventory - - arguments - linkNumbertypeinteger - nametypeinteger - - - osGiveLinkInventory - - arguments - linkNumbertypeinteger - destinationtypekey - inventorytypestring - - - osGiveLinkInventoryList - - arguments - linkNumbertypeinteger - destinationtypekey - categorytypestring - inventorytypestring - - - osGetLastChangedEventKey - - returnkey - arguments - osGetLinkNumber returninteger @@ -7523,14 +7563,14 @@ osGetPrimCount returninteger - arguments + arguments + object_idtypekey + osGetPrimCount returninteger - arguments - object_idtypekey - + arguments osGetPrimitiveParams @@ -7605,14 +7645,14 @@ osGetSittingAvatarsCount returninteger - arguments - object_idtypekey - + arguments osGetSittingAvatarsCount returninteger - arguments + arguments + object_idtypekey + osGetStandTarget @@ -7642,6 +7682,23 @@ paramtypestring + osGiveLinkInventory + + arguments + linkNumbertypeinteger + destinationtypekey + inventorytypestring + + + osGiveLinkInventoryList + + arguments + linkNumbertypeinteger + destinationtypekey + categorytypestring + inventorytypelist + + osInviteToGroup returninteger @@ -7837,7 +7894,6 @@ nametypestring positiontypevector notecardtypestring - optionstypeinteger osNpcCreate @@ -7848,6 +7904,7 @@ nametypestring positiontypevector notecardtypestring + optionstypeinteger osNpcGetOwner @@ -7922,6 +7979,7 @@ arguments npctypekey notecardtypestring + includeHudstypeinteger osNpcSaveAppearance @@ -7930,14 +7988,12 @@ arguments npctypekey notecardtypestring - includeHudstypeinteger osNpcSay arguments npctypekey - channeltypeinteger messagetypestring @@ -7945,6 +8001,7 @@ arguments npctypekey + channeltypeinteger messagetypestring @@ -8115,13 +8172,21 @@ osRegionNotice arguments + agentIDtypekey msgtypestring osRegionNotice arguments - agentIDtypekey + msgtypestring + + + osRegionRestart + + returninteger + arguments + secondstypefloat msgtypestring @@ -8132,12 +8197,11 @@ secondstypefloat - osRegionRestart + osRemoveLinkInventory - returninteger arguments - secondstypefloat - msgtypestring + linkNumbertypeinteger + nametypestring osReplaceAgentEnvironment @@ -8377,7 +8441,7 @@ returnstring arguments drawListtypestring - colortypevector + colortypestring osSetPenColor @@ -8385,7 +8449,7 @@ returnstring arguments drawListtypestring - colortypestring + colortypevector osSetPenColor @@ -8427,17 +8491,6 @@ osSetProjectionParams - - arguments - linknumbertypeinteger - projectiontypeinteger - texturetypekey - fovtypefloat - focustypefloat - ambtypefloat - - - osSetProjectionParams arguments projectiontypeinteger @@ -8458,6 +8511,17 @@ ambtypefloat + osSetProjectionParams + + arguments + linknumbertypeinteger + projectiontypeinteger + texturetypekey + fovtypefloat + focustypefloat + ambtypefloat + + osSetRegionSunSettings arguments @@ -8603,6 +8667,8 @@ arguments srctypestring valuetypestring + starttypeinteger + counttypeinteger ignorecasetypeinteger @@ -8612,8 +8678,6 @@ arguments srctypestring valuetypestring - starttypeinteger - counttypeinteger ignorecasetypeinteger @@ -8650,6 +8714,7 @@ arguments srctypestring starttypeinteger + lengthtypeinteger osStringSubString @@ -8658,7 +8723,6 @@ arguments srctypestring starttypeinteger - lengthtypeinteger osSunGetParam @@ -8679,7 +8743,6 @@ arguments agenttypestring - regionNametypestring positiontypevector lookattypevector @@ -8698,6 +8761,7 @@ arguments agenttypestring + regionNametypestring positiontypevector lookattypevector @@ -8713,6 +8777,14 @@ osTeleportOwner + + arguments + regionNametypestring + positiontypevector + lookattypevector + + + osTeleportOwner arguments positiontypevector @@ -8728,12 +8800,11 @@ lookattypevector - osTeleportOwner + osTemperature2sRGB + returnvector arguments - regionNametypestring - positiontypevector - lookattypevector + dtemptypefloat osTerrainFlush @@ -8799,39 +8870,5 @@ returnstring arguments - osAESEncrypt - - returnstring - arguments - secrettypestring - plainTexttypestring - - - osAESEncryptTo - - returnstring - arguments - secrettypestring - plainTexttypestring - ivStringtypestring - - - osAESDecrypt - - returnstring - arguments - secrettypestring - encryptedTexttypestring - - - osAESDecryptFrom - - returnstring - arguments - secrettypestring - encryptedTexttypestring - ivStringtypestring - - \ No newline at end of file From ebcc0f00774f3011f0cfc13fc818c174a356f741 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Tue, 11 Jun 2024 07:49:22 -0400 Subject: [PATCH 06/14] Postgresql Fixes: region store, mutelist and generic table handler. Signed-off-by: UbitUmarov --- .../Data/PGSQL/PGSQLGenericTableHandler.cs | 2 +- OpenSim/Data/PGSQL/PGSQLMuteListData.cs | 72 +++++++++ OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 137 ++++++++---------- .../PGSQL/Resources/MuteListStore.migrations | 17 +++ .../PGSQL/Resources/RegionStore.migrations | 19 +++ 5 files changed, 171 insertions(+), 76 deletions(-) create mode 100644 OpenSim/Data/PGSQL/PGSQLMuteListData.cs create mode 100644 OpenSim/Data/PGSQL/Resources/MuteListStore.migrations diff --git a/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs index 2d8aef0bae..7fe70d2c7a 100644 --- a/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs +++ b/OpenSim/Data/PGSQL/PGSQLGenericTableHandler.cs @@ -534,7 +534,7 @@ namespace OpenSim.Data.PGSQL { for (int i = 0; i < fields.Length; i++) { - cmd.Parameters.AddWithValue(fields[i], keys[i]); + cmd.Parameters.AddWithValue(fields[i], new Guid(keys[i])); terms.Add("\"" + fields[i] + "\" = :" + fields[i]); } diff --git a/OpenSim/Data/PGSQL/PGSQLMuteListData.cs b/OpenSim/Data/PGSQL/PGSQLMuteListData.cs new file mode 100644 index 0000000000..6b49f46fa7 --- /dev/null +++ b/OpenSim/Data/PGSQL/PGSQLMuteListData.cs @@ -0,0 +1,72 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using OpenSim.Framework; +using OpenMetaverse; +using Npgsql; + +namespace OpenSim.Data.PGSQL +{ + public class PGSQLMuteListData: PGSQLGenericTableHandler, IMuteListData + { + public PGSQLMuteListData(string connectionString) + : base(connectionString, "MuteList", "MuteListStore") + { + } + + public MuteData[] Get(UUID agentID) + { + var data = base.Get("AgentID", agentID.ToString()); + return data; + } + + public bool Delete(UUID agentID, UUID muteID, string muteName) + { + var query = $"DELETE FROM MuteList WHERE \"AgentID\" = :AgentID and " + + $"\"MuteID\" = :MuteID and " + + $"\"MuteName\" = :MuteName"; + + using (NpgsqlConnection conn = new NpgsqlConnection(m_ConnectionString)) + using (NpgsqlCommand cmd = new NpgsqlCommand()) + { + cmd.CommandText = query; + cmd.Parameters.AddWithValue(":AgentID", agentID.ToString()); + cmd.Parameters.AddWithValue(":MuteID", muteID.ToString()); + cmd.Parameters.AddWithValue("MuteName", muteName); + cmd.Connection = conn; + conn.Open(); + cmd.ExecuteNonQuery(); + + return true; + } + } + } +} \ No newline at end of file diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs index 155594f33c..b0b4639db1 100755 --- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs +++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs @@ -784,7 +784,7 @@ namespace OpenSim.Data.PGSQL cmd.ExecuteNonQuery(); } - sql = @"INSERT INTO landaccesslist (""LandUUID"",""AccessUUID"",""LandFlags"",""Expires"") VALUES (:LandUUID,:AccessUUID,:Flags,:Expires)"; + sql = @"INSERT INTO landaccesslist (""LandUUID"",""AccessUUID"",""Flags"",""Expires"") VALUES (:LandUUID,:AccessUUID,:Flags,:Expires)"; using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString)) using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn)) @@ -920,7 +920,8 @@ namespace OpenSim.Data.PGSQL regionSettings.OnSave += StoreRegionSettings; //Store new values - StoreNewRegionSettings(regionSettings); + // StoreNewRegionSettings(regionSettings); + StoreRegionSettings(regionSettings); LoadSpawnPoints(regionSettings); @@ -928,51 +929,69 @@ namespace OpenSim.Data.PGSQL } /// - /// Store region settings, need to check if the check is really necesary. If we can make something for creating new region. + /// Store region settings /// /// region settings. public void StoreRegionSettings(RegionSettings regionSettings) { - //Little check if regionUUID already exist in DB - string regionUUID; - string sql = @"SELECT ""regionUUID"" FROM regionsettings WHERE ""regionUUID"" = :regionUUID"; - using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString)) - using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn)) - { - cmd.Parameters.Add(_Database.CreateParameter("regionUUID", regionSettings.RegionUUID)); - conn.Open(); - regionUUID = cmd.ExecuteScalar().ToString(); - } + const string queryString = """ + INSERT INTO regionsettings ( "regionUUID", block_terraform, block_fly, allow_damage, restrict_pushing, + allow_land_resell, allow_land_join_divide, block_show_in_search, agent_limit, object_bonus, + maturity, disable_scripts, disable_collisions, disable_physics, terrain_texture_1, terrain_texture_2, + terrain_texture_3, terrain_texture_4, elevation_1_nw, elevation_2_nw, elevation_1_ne, elevation_2_ne, + elevation_1_se, elevation_2_se, elevation_1_sw, elevation_2_sw, water_height, terrain_raise_limit, + terrain_lower_limit, use_estate_sun, fixed_sun, sun_position, covenant, covenant_datetime, "Sandbox", + sunvectorx, sunvectory, sunvectorz, loaded_creation_datetime, loaded_creation_id, "map_tile_ID", + block_search, casino, "TelehubObject", "parcel_tile_ID", "cacheID", "TerrainPBR1", "TerrainPBR2", + "TerrainPBR3", "TerrainPBR4") + VALUES + (:RegionUUID, :block_terraform, :block_fly, :allow_damage, :restrict_pushing, :allow_land_resell, + :allow_land_join_divide, :block_show_in_search, :agent_limit, :object_bonus, :maturity, :disable_scripts, + :disable_collisions, :disable_physics, :terrain_texture_1, :terrain_texture_2, :terrain_texture_3, + :terrain_texture_4, :elevation_1_nw, :elevation_2_nw, :elevation_1_ne, :elevation_2_ne, :elevation_1_se, + :elevation_2_se, :elevation_1_sw, :elevation_2_sw, :water_height, :terrain_raise_limit, :terrain_lower_limit, + :use_estate_sun, :fixed_sun, :sun_position, :covenant, :covenant_datetime, :Sandbox, :sunvectorx, + :sunvectory, :sunvectorz, :Loaded_Creation_DateTime, :Loaded_Creation_ID, :map_tile_ID, + :block_search, :casino, :TelehubObject, :ParcelImageID, :cacheID, :TerrainPBR1, :TerrainPBR2, + :TerrainPBR3, :TerrainPBR4) + ON CONFLICT ("regionUUID") + DO UPDATE SET "regionUUID" = :RegionUUID, block_terraform = :block_terraform, block_fly = :block_fly, + allow_damage = :allow_damage, restrict_pushing = :restrict_pushing, allow_land_resell = :allow_land_resell, + allow_land_join_divide = :allow_land_join_divide, block_show_in_search = :block_show_in_search, + agent_limit = :agent_limit, object_bonus = :object_bonus, maturity = :maturity, disable_scripts = :disable_scripts, + disable_collisions = :disable_collisions, disable_physics = :disable_physics, terrain_texture_1 = :terrain_texture_1, + terrain_texture_2 = :terrain_texture_2, terrain_texture_3 = :terrain_texture_3, terrain_texture_4 = :terrain_texture_4, + elevation_1_nw = :elevation_1_nw, elevation_2_nw = :elevation_2_nw, elevation_1_ne = :elevation_1_ne, + elevation_2_ne = :elevation_2_ne, elevation_1_se = :elevation_1_se, elevation_2_se = :elevation_2_se, + elevation_1_sw = :elevation_1_sw, elevation_2_sw = :elevation_2_sw, water_height = :water_height, + terrain_raise_limit = :terrain_raise_limit, terrain_lower_limit = :terrain_lower_limit, + use_estate_sun = :use_estate_sun, fixed_sun = :fixed_sun, sun_position = :sun_position, covenant = :covenant, + covenant_datetime = :covenant_datetime, "Sandbox" = :Sandbox, sunvectorx = :sunvectorx, + sunvectory = :sunvectory, sunvectorz = :sunvectorz, loaded_creation_datetime = :Loaded_Creation_DateTime, + loaded_creation_id = :Loaded_Creation_ID, "map_tile_ID" = :map_tile_ID, block_search = :block_search, + casino = :casino, "TelehubObject" = :TelehubObject, "parcel_tile_ID" = :ParcelImageID, "cacheID" = :cacheID, + "TerrainPBR1" = :TerrainPBR1, "TerrainPBR2" = :TerrainPBR2, "TerrainPBR3" = :TerrainPBR3, + "TerrainPBR4" = :TerrainPBR4 + """; - if (string.IsNullOrEmpty(regionUUID)) + using (var connection = new NpgsqlConnection(m_connectionString)) { - StoreNewRegionSettings(regionSettings); - } - else - { - //This method only updates region settings!!! First call LoadRegionSettings to create new region settings in DB - sql = - @"UPDATE regionsettings SET block_terraform = :block_terraform ,block_fly = :block_fly ,allow_damage = :allow_damage -,restrict_pushing = :restrict_pushing ,allow_land_resell = :allow_land_resell ,allow_land_join_divide = :allow_land_join_divide -,block_show_in_search = :block_show_in_search ,agent_limit = :agent_limit ,object_bonus = :object_bonus ,maturity = :maturity -,disable_scripts = :disable_scripts ,disable_collisions = :disable_collisions ,disable_physics = :disable_physics -,terrain_texture_1 = :terrain_texture_1 ,terrain_texture_2 = :terrain_texture_2 ,terrain_texture_3 = :terrain_texture_3 -,terrain_texture_4 = :terrain_texture_4 , TerrainPBR1 = :TerrainPBR1, TerrainPBR2 = :TerrainPBR2, TerrainPBR3 = :TerrainPBR3 -,TerrainPBR4 = :TerrainPBR4, elevation_1_nw = :elevation_1_nw ,elevation_2_nw = :elevation_2_nw -,elevation_1_ne = :elevation_1_ne ,elevation_2_ne = :elevation_2_ne ,elevation_1_se = :elevation_1_se ,elevation_2_se = :elevation_2_se -,elevation_1_sw = :elevation_1_sw ,elevation_2_sw = :elevation_2_sw ,water_height = :water_height ,terrain_raise_limit = :terrain_raise_limit -,terrain_lower_limit = :terrain_lower_limit ,use_estate_sun = :use_estate_sun ,fixed_sun = :fixed_sun ,sun_position = :sun_position -,covenant = :covenant ,covenant_datetime = :covenant_datetime, sunvectorx = :sunvectorx, sunvectory = :sunvectory, sunvectorz = :sunvectorz, -""Sandbox"" = :Sandbox, loaded_creation_datetime = :loaded_creation_datetime, loaded_creation_id = :loaded_creation_id, ""map_tile_ID"" = :TerrainImageID, -""TelehubObject"" = :telehubobject, ""parcel_tile_ID"" = :ParcelImageID, ""cacheID"" = :cacheID - WHERE ""regionUUID"" = :regionUUID"; - - using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString)) - using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn)) + connection.Open(); + NpgsqlCommand command = new NpgsqlCommand(queryString, connection, connection.BeginTransaction()); + using (command) { - cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); - conn.Open(); - cmd.ExecuteNonQuery(); + try + { + command.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); + command.ExecuteNonQuery(); + command.Transaction.Commit(); + } + catch (Exception e) + { + Console.WriteLine(e); + command.Transaction.Rollback(); + throw; + } } } SaveSpawnPoints(regionSettings); @@ -983,39 +1002,6 @@ namespace OpenSim.Data.PGSQL //Not used?? } - #region Private Methods - - /// - /// Stores new regionsettings. - /// - /// The region settings. - private void StoreNewRegionSettings(RegionSettings regionSettings) - { - string sql = @"INSERT INTO regionsettings - (""regionUUID"",block_terraform,block_fly,allow_damage,restrict_pushing,allow_land_resell,allow_land_join_divide, - block_show_in_search,agent_limit,object_bonus,maturity,disable_scripts,disable_collisions,disable_physics, - terrain_texture_1,terrain_texture_2,terrain_texture_3,terrain_texture_4,elevation_1_nw,elevation_2_nw,elevation_1_ne, - elevation_2_ne,elevation_1_se,elevation_2_se,elevation_1_sw,elevation_2_sw,water_height,terrain_raise_limit, - terrain_lower_limit,use_estate_sun,fixed_sun,sun_position,covenant,covenant_datetime,sunvectorx, sunvectory, sunvectorz, - ""Sandbox"", loaded_creation_datetime, loaded_creation_id - ) - VALUES - (:regionUUID,:block_terraform,:block_fly,:allow_damage,:restrict_pushing,:allow_land_resell,:allow_land_join_divide, - :block_show_in_search,:agent_limit,:object_bonus,:maturity,:disable_scripts,:disable_collisions,:disable_physics, - :terrain_texture_1,:terrain_texture_2,:terrain_texture_3,:terrain_texture_4,:elevation_1_nw,:elevation_2_nw,:elevation_1_ne, - :elevation_2_ne,:elevation_1_se,:elevation_2_se,:elevation_1_sw,:elevation_2_sw,:water_height,:terrain_raise_limit, - :terrain_lower_limit,:use_estate_sun,:fixed_sun,:sun_position,:covenant, :covenant_datetime, :sunvectorx,:sunvectory, - :sunvectorz, :Sandbox, :loaded_creation_datetime, :loaded_creation_id )"; - - using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString)) - using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn)) - { - cmd.Parameters.AddRange(CreateRegionSettingParameters(regionSettings)); - conn.Open(); - cmd.ExecuteNonQuery(); - } - } - #region Private DataRecord conversion methods /// @@ -1601,7 +1587,9 @@ namespace OpenSim.Data.PGSQL _Database.CreateParameter("covenant_datetime", settings.CovenantChangedDateTime), _Database.CreateParameter("Loaded_Creation_DateTime", settings.LoadedCreationDateTime), _Database.CreateParameter("Loaded_Creation_ID", settings.LoadedCreationID), - _Database.CreateParameter("TerrainImageID", settings.TerrainImageID), + _Database.CreateParameter("map_tile_ID", settings.TerrainImageID), + _Database.CreateParameter("block_search", settings.GodBlockSearch), + _Database.CreateParameter("casino", settings.Casino), _Database.CreateParameter("ParcelImageID", settings.ParcelImageID), _Database.CreateParameter("TelehubObject", settings.TelehubObject), _Database.CreateParameter("cacheID", settings.CacheID), @@ -1968,7 +1956,6 @@ namespace OpenSim.Data.PGSQL #endregion - #endregion private void LoadSpawnPoints(RegionSettings rs) { diff --git a/OpenSim/Data/PGSQL/Resources/MuteListStore.migrations b/OpenSim/Data/PGSQL/Resources/MuteListStore.migrations new file mode 100644 index 0000000000..83f3fcc2c0 --- /dev/null +++ b/OpenSim/Data/PGSQL/Resources/MuteListStore.migrations @@ -0,0 +1,17 @@ +:VERSION 1 + +BEGIN TRANSACTION; + +CREATE TABLE IF NOT EXISTS MuteList ( + + "AgentID" varchar(36) NOT NULL, + "MuteId" varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000', + "MuteName" varchar(64) NOT NULL DEFAULT '', + "MuteType" int4 NOT NULL DEFAULT 1, + "MuteFlags" int4 NOT NULL DEFAULT 0, + "Stamp" int4 NOT NULL, + CONSTRAINT pk_agent_id PRIMARY KEY ("AgentID"), + CONSTRAINT unique_agent_2 UNIQUE ("AgentID", "MuteId", "MuteName") +); + +COMMIT; \ No newline at end of file diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index 7b86e28f04..a49c5df143 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1267,3 +1267,22 @@ ALTER TABLE regionsettings ADD COLUMN "TerrainPBR2" uuid NOT NULL DEFAULT '00000 ALTER TABLE regionsettings ADD COLUMN "TerrainPBR3" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; ALTER TABLE regionsettings ADD COLUMN "TerrainPBR4" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'; COMMIT; + +:VERSION 55 #----- Fix data type for columns +BEGIN; +ALTER TABLE public.regionsettings ALTER COLUMN "block_search" DROP DEFAULT; +ALTER TABLE public.regionsettings ALTER COLUMN "casino" DROP DEFAULT; +ALTER TABLE public.regionsettings + ALTER COLUMN "block_search" TYPE BOOLEAN + USING CASE WHEN "block_search" = 0 THEN FALSE + WHEN "block_search" = 1 THEN TRUE + ELSE NULL + END; + +ALTER TABLE public.regionsettings + ALTER COLUMN "casino" TYPE BOOLEAN + USING CASE WHEN "casino" = 0 THEN FALSE + WHEN "casino" = 1 THEN TRUE + ELSE NULL + END; +COMMIT; \ No newline at end of file From 6c857b7ff9df08e5f867b3806ee0e4d816dda7b2 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Fri, 21 Jun 2024 12:03:01 -0400 Subject: [PATCH 07/14] Fix wrong primary key on telehub spawn points. With the RegionUUID being created as a unique primary key only one spawn point could be created. Replaced the primary key with one using multiple columns to guarantee that each spawn point occupies a unique space in the region. Signed-off-by: UbitUmarov --- OpenSim/Data/PGSQL/Resources/RegionStore.migrations | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index a49c5df143..03d58905c0 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1285,4 +1285,11 @@ ALTER TABLE public.regionsettings WHEN "casino" = 1 THEN TRUE ELSE NULL END; -COMMIT; \ No newline at end of file +COMMIT; + +:VERSION 56 #----- Fix the constraints on the spawn points +BEGIN; +ALTER TABLE spawn_points DROP CONSTRAINT spawn_points_pkey; +ALTER TABLE spawn_points ADD CONSTRAINT spawn_points_pkey + PRIMARY KEY ("RegionUUID", "Yaw", "Pitch", "Distance"); +COMMIT; From eb74fa6eecabdd1103f6c2fe9cff844ab72addd0 Mon Sep 17 00:00:00 2001 From: BlueWall Date: Sun, 23 Jun 2024 17:17:54 -0400 Subject: [PATCH 08/14] Fix region data loading to prevent deletion of telehub spawnpoints Signed-off-by: UbitUmarov --- OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs index b0b4639db1..a743cc835b 100755 --- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs +++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs @@ -896,7 +896,7 @@ namespace OpenSim.Data.PGSQL public RegionSettings LoadRegionSettings(UUID regionUUID) { string sql = @"select * from regionsettings where ""regionUUID"" = :regionUUID"; - RegionSettings regionSettings; + RegionSettings regionSettings = null; using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString)) using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn)) { @@ -908,10 +908,13 @@ namespace OpenSim.Data.PGSQL { regionSettings = BuildRegionSettings(reader); regionSettings.OnSave += StoreRegionSettings; - - return regionSettings; } } + if (regionSettings != null) + { + LoadSpawnPoints(regionSettings); + return regionSettings; + } } //If we reach this point then there are new region settings for that region @@ -1970,14 +1973,14 @@ namespace OpenSim.Data.PGSQL conn.Open(); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { - if (reader.Read()) + while (reader.Read()) { - SpawnPoint sp = new SpawnPoint(); - - sp.Yaw = (float)reader["Yaw"]; - sp.Pitch = (float)reader["Pitch"]; - sp.Distance = (float)reader["Distance"]; - + var sp = new SpawnPoint + { + Yaw = Convert.ToSingle(reader["Yaw"]), + Pitch = Convert.ToSingle(reader["Pitch"]), + Distance = Convert.ToSingle(reader["Distance"]) + }; rs.AddSpawnPoint(sp); } } From 48a300fa2fead5026e549b264c56e7f9da1d3c9f Mon Sep 17 00:00:00 2001 From: BlueWall Date: Mon, 24 Jun 2024 13:48:46 -0400 Subject: [PATCH 09/14] Adding missing 'regionextra' table and associated handlers to the PgSQL adapter. Signed-off-by: UbitUmarov --- OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 49 ++++++++++++++++++- .../PGSQL/Resources/RegionStore.migrations | 11 +++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs index a743cc835b..931459aa74 100755 --- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs +++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs @@ -2020,15 +2020,62 @@ namespace OpenSim.Data.PGSQL public void SaveExtra(UUID regionID, string name, string value) { + const string queryString = """ + INSERT INTO regionextra ("RegionID", "Name", "value") + VALUES (:RegionID, :Name, :Value) + """; + using var connection = new NpgsqlConnection(m_connectionString); + connection.Open(); + using var command = new NpgsqlCommand(queryString, connection, connection.BeginTransaction()); + try + { + command.Parameters.AddWithValue("RegionID", regionID.ToString()); + command.Parameters.AddWithValue("Name", name); + command.Parameters.AddWithValue("Value", value); + command.ExecuteNonQuery(); + command.Transaction.Commit(); + } + catch (Exception e) + { + Console.WriteLine(e); + command.Transaction.Rollback(); + } } public void RemoveExtra(UUID regionID, string name) { + const string queryString = """DELETE FROM regionextra WHERE "RegionID"=:RegionID AND "Name"=:Name"""; + using var connection = new NpgsqlConnection(m_connectionString); + connection.Open(); + using var command = new NpgsqlCommand(queryString, connection, connection.BeginTransaction()); + try + { + command.Parameters.AddWithValue("RegionID", regionID.ToString()); + command.Parameters.AddWithValue("Name", name); + command.ExecuteNonQuery(); + command.Transaction.Commit(); + } + catch (Exception e) + { + Console.WriteLine(e); + command.Transaction.Rollback(); + } } public Dictionary GetExtra(UUID regionID) { - return null; + const string queryString = """SELECT * FROM regionextra WHERE "RegionID" = :RegionID"""; + using NpgsqlConnection conn = new NpgsqlConnection(m_connectionString); + using NpgsqlCommand cmd = new NpgsqlCommand(queryString, conn); + cmd.Parameters.Add(_Database.CreateParameter("RegionID", regionID.ToString())); + conn.Open(); + using NpgsqlDataReader reader = cmd.ExecuteReader(); + Dictionary extraSettings = new Dictionary(); + while (reader.Read()) + { + extraSettings.Add(reader["Name"].ToString(), reader["value"].ToString()); + } + return extraSettings; } } } diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index 03d58905c0..bde59a7c29 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1293,3 +1293,14 @@ ALTER TABLE spawn_points DROP CONSTRAINT spawn_points_pkey; ALTER TABLE spawn_points ADD CONSTRAINT spawn_points_pkey PRIMARY KEY ("RegionUUID", "Yaw", "Pitch", "Distance"); COMMIT; + +:VERSION 57 #----- Adding a table missing from the PgSQL adapter +BEGIN; +CREATE TABLE "regionextra" + ( + "RegionID" char(36), + "Name" varchar(32), + "value" text, + PRIMARY KEY ("RegionID", "Name") + ); +COMMIT; From b06ecf801469f966705a17f8b5323c1741f23168 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 3 Jul 2024 00:44:02 +0100 Subject: [PATCH 10/14] viewers now are sending a useless flood of agent updates. Ignore some --- OpenSim/Framework/AgentUpdateArgs.cs | 1 + .../ClientStack/Linden/UDP/LLClientView.cs | 33 +++++++++---------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/OpenSim/Framework/AgentUpdateArgs.cs b/OpenSim/Framework/AgentUpdateArgs.cs index 994ab87fba..2e9ece5e18 100644 --- a/OpenSim/Framework/AgentUpdateArgs.cs +++ b/OpenSim/Framework/AgentUpdateArgs.cs @@ -78,6 +78,7 @@ namespace OpenSim.Framework public bool NeedsCameraCollision; public uint lastpacketSequence; public double lastUpdateTS; + public double lastMoveUpdateTS; public AgentUpdateArgs() { diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 5898370b6e..454347fa55 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -1003,6 +1003,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // reset agent update args m_thisAgentUpdateArgs.CameraAtAxis.X = float.MinValue; m_thisAgentUpdateArgs.lastUpdateTS = 0; + m_thisAgentUpdateArgs.lastMoveUpdateTS = 0; m_thisAgentUpdateArgs.ControlFlags = 0; UDPPacketBuffer buf = OpenSimUDPBase.GetNewUDPBuffer(m_udpClient.RemoteEndPoint); @@ -8500,28 +8501,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Threshold for camera rotation to be a significant agent update private const float VDELTA = 0.01f; - /// - /// This checks the update significance against the last update made. - /// - /// Can only be called by one thread at a time - /// - /// - public bool CheckAgentUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) - { - return CheckAgentMovementUpdateSignificance(x) || CheckAgentCameraUpdateSignificance(x); - } - /// /// This checks the movement/state update significance against the last update made. /// /// Can only be called by one thread at a time /// /// - private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x, double now) { - if( + if((x.ControlFlags & ~(uint)AgentManager.ControlFlags.AGENT_CONTROL_FINISH_ANIM) != (uint)AgentManager.ControlFlags.NONE && + now > m_thisAgentUpdateArgs.lastMoveUpdateTS + 20) + return true; + + if ( (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed - || (x.ControlFlags & ~(uint)AgentManager.ControlFlags.AGENT_CONTROL_FINISH_ANIM) != (uint)AgentManager.ControlFlags.NONE || (x.Flags != m_thisAgentUpdateArgs.Flags) // significant if Flags changed || (x.State != m_thisAgentUpdateArgs.State) // significant if Stats changed || (MathF.Abs(x.Far - m_thisAgentUpdateArgs.Far) >= 32f) // significant if far distance changed @@ -8538,6 +8532,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// Can only be called by one thread at a time /// /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool CheckAgentCameraUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) { return (MathF.Abs(x.CameraCenter.X - m_thisAgentUpdateArgs.CameraCenter.X) > VDELTA || @@ -8575,26 +8570,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP c.m_thisAgentUpdateArgs.lastpacketSequence = seq; - c.OnPreAgentUpdate?.Invoke(c, c.m_thisAgentUpdateArgs); - bool movement; bool camera; double now = Util.GetTimeStampMS(); - if(now - c.m_thisAgentUpdateArgs.lastUpdateTS > 500.0) // at least 2 per sec + if (now - c.m_thisAgentUpdateArgs.lastUpdateTS > 500.0) // at least 2 per sec { movement = true; camera = true; } else { - movement = c.CheckAgentMovementUpdateSignificance(x); + movement = c.CheckAgentMovementUpdateSignificance(x, now); camera = c.CheckAgentCameraUpdateSignificance(x); } + c.OnPreAgentUpdate?.Invoke(c, c.m_thisAgentUpdateArgs); + // Was there a significant movement/state change? if (movement) { + c.m_thisAgentUpdateArgs.lastMoveUpdateTS = now; + c.m_thisAgentUpdateArgs.BodyRotation = x.BodyRotation; c.m_thisAgentUpdateArgs.ControlFlags = x.ControlFlags; c.m_thisAgentUpdateArgs.Far = x.Far; From c8b13599df84b957226799b702f988a90759b397 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 3 Jul 2024 20:03:47 +0100 Subject: [PATCH 11/14] fix shared group object item modify permission check --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 1abf0167d3..572aaa3777 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -267,7 +267,7 @@ namespace OpenSim.Region.Framework.Scenes return UUID.Zero; } - if (item.OwnerID.NotEqual(avatarId)) + if (!Permissions.CanEditObjectInventory(objectID, avatarId)) return UUID.Zero; InventoryType itemType = (InventoryType)item.InvType; From 0bf18539b590d159f15a725a796dc4d75e2da7a8 Mon Sep 17 00:00:00 2001 From: Sue Cripter Date: Thu, 4 Jul 2024 00:10:29 +0200 Subject: [PATCH 12/14] Add llGetNotecardLineSync --- .../Shared/Api/Implementation/LSL_Api.cs | 26 +++++++++++++++++++ .../Shared/Api/Interface/ILSL_Api.cs | 1 + .../Shared/Api/Runtime/LSL_Constants.cs | 1 + .../Shared/Api/Runtime/LSL_Stub.cs | 6 +++++ 4 files changed, 34 insertions(+) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index c70588e2e6..da03211857 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -14985,6 +14985,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return tid.ToString(); } + public LSL_String llGetNotecardLineSync(string name, int line) + { + if (!UUID.TryParse(name, out UUID assetID)) + { + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item != null && item.Type == 7) + assetID = item.AssetID; + else + { + Error("llGetNotecardLineSync", "Can't find notecard '" + name + "'"); + + return ScriptBaseClass.NAK; + } + } + + if (NotecardCache.IsCached(assetID)) + { + return NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax); + } + else + { + return ScriptBaseClass.NAK; + } + } + public LSL_Key llGetNotecardLine(string name, int line) { if (!UUID.TryParse(name, out UUID assetID)) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 3290620c59..9061624d06 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs @@ -176,6 +176,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces void llGetNextEmail(string address, string subject); LSL_Key llGetNotecardLine(string name, int line); LSL_Key llGetNumberOfNotecardLines(string name); + LSL_String llGetNotecardLineSync(string name, int line); LSL_Integer llGetNumberOfPrims(); LSL_Integer llGetNumberOfSides(); LSL_String llGetObjectDesc(); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 1ccaf85fa8..74f19eab1c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -609,6 +609,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const string NULL_KEY = "00000000-0000-0000-0000-000000000000"; public const string EOF = "\n\n\n"; + public const string NAK = "\n\u0015\n"; public const double PI = 3.14159274f; public const double TWO_PI = 6.28318548f; public const double PI_BY_TWO = 1.57079637f; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index b34cce4f70..e84e664cf5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -758,6 +758,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase return m_LSL_Functions.llGetNumberOfNotecardLines(name); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public LSL_String llGetNotecardLineSync(string name, int line) + { + return m_LSL_Functions.llGetNotecardLineSync(name, line); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public LSL_Integer llGetNumberOfPrims() { From 73a9462ef8b217af5a5dd3dd01d0252fef52f3ab Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 4 Jul 2024 00:04:15 +0100 Subject: [PATCH 13/14] a few changes to llGetNotecardLineSync --- .../Shared/Api/Implementation/LSL_Api.cs | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index da03211857..ccd7961758 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -14987,23 +14987,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_String llGetNotecardLineSync(string name, int line) { + if (line < 0) + return ScriptBaseClass.NAK; + if (!UUID.TryParse(name, out UUID assetID)) { - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name, 7); - if (item != null && item.Type == 7) - assetID = item.AssetID; - else + if (item is null) { Error("llGetNotecardLineSync", "Can't find notecard '" + name + "'"); return ScriptBaseClass.NAK; } + assetID = item.AssetID; } if (NotecardCache.IsCached(assetID)) { - return NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax); + return NotecardCache.GetllLine(assetID, line, 1024); } else { @@ -18862,6 +18864,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return ""; } + public static string GetllLine(UUID assetID, int lineNumber, int maxLength) + { + if (m_Notecards.TryGetValue(assetID, 30000, out string[] text)) + { + if (lineNumber >= text.Length) + return "\n\n\n"; + + return text[lineNumber].Length < maxLength ? text[lineNumber] : text[lineNumber][..maxLength]; + } + return ScriptBaseClass.NAK; + } + /// /// Get a notecard line. /// From cce33277349dd3ad65b4ee4bf2176a2e93d215c5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 4 Jul 2024 00:07:37 +0100 Subject: [PATCH 14/14] minor cleanup --- .../Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index ccd7961758..6e24a26d7c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -14993,11 +14993,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (!UUID.TryParse(name, out UUID assetID)) { TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name, 7); - + if (item is null) { Error("llGetNotecardLineSync", "Can't find notecard '" + name + "'"); - return ScriptBaseClass.NAK; } assetID = item.AssetID;