From c136bcef6e9380639783ce7e8a51af66a8c9c369 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 8 Oct 2020 21:45:33 +0100 Subject: [PATCH] osInviteToGroup: dont invite if already member (returns TRUE in this case) --- .../Shared/Api/Implementation/OSSL_Api.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index b237752ce7..27799ed027 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -4089,14 +4089,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (!UUID.TryParse(agentId, out agent)) return ScriptBaseClass.FALSE; - // invited agent has to be present in this scene - if (World.GetScenePresence(agent) == null) - return ScriptBaseClass.FALSE; - // object has to be set to a group, but not group owned if (m_host.GroupID == UUID.Zero || m_host.GroupID == m_host.OwnerID) return ScriptBaseClass.FALSE; + // invited agent has to be present in this scene + ScenePresence sp = World.GetScenePresence(agent); + if (sp == null || !sp.ControllingClient.IsActive) + return ScriptBaseClass.FALSE; + + if (sp.ControllingClient.IsGroupMember(m_host.GroupID)) + return ScriptBaseClass.TRUE; + // object owner has to be in that group and required permissions GroupMembershipData member = m_groupsModule.GetMembershipData(m_host.GroupID, m_host.OwnerID); if (member == null || (member.GroupPowers & (ulong)GroupPowers.Invite) == 0)