diff options
author | Melanie Thielker | 2016-07-04 03:37:45 +0100 |
---|---|---|
committer | Melanie Thielker | 2016-07-04 03:37:45 +0100 |
commit | 4468aa0dcfebb045bc54df1f67f021f85f9bc4b6 (patch) | |
tree | f52b7cf28acfe4bdbdff7ed7dfd112c6dd6b16fb /OpenSim/Region | |
parent | Finally remove the requirement for an InventoryItem/FolderBase object to (diff) | |
parent | New config var: DisableObjectTransfer. If set to True, objects never cross; i... (diff) | |
download | opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.zip opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.gz opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.bz2 opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.xz |
Merge branch 'master' of opensimulator.org:/var/git/opensim
Diffstat (limited to 'OpenSim/Region')
14 files changed, 227 insertions, 190 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 9a1cef4..cc614f3 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | |||
@@ -579,12 +579,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
579 | Enqueue(item, avatarID); | 579 | Enqueue(item, avatarID); |
580 | } | 580 | } |
581 | 581 | ||
582 | public void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID) | ||
583 | { | ||
584 | OSD item = EventQueueHelper.GroupMembership(groupUpdate); | ||
585 | Enqueue(item, avatarID); | ||
586 | } | ||
587 | |||
588 | public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) | 582 | public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) |
589 | { | 583 | { |
590 | OSD item = EventQueueHelper.GroupMembershipData(receiverAgent, data); | 584 | OSD item = EventQueueHelper.GroupMembershipData(receiverAgent, data); |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs index 29d8b85..8beeb95 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs | |||
@@ -333,40 +333,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
333 | return chatterBoxSessionAgentListUpdates; | 333 | return chatterBoxSessionAgentListUpdates; |
334 | } | 334 | } |
335 | 335 | ||
336 | public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket) | ||
337 | { | ||
338 | OSDMap groupUpdate = new OSDMap(); | ||
339 | groupUpdate.Add("message", OSD.FromString("AgentGroupDataUpdate")); | ||
340 | |||
341 | OSDMap body = new OSDMap(); | ||
342 | OSDArray agentData = new OSDArray(); | ||
343 | OSDMap agentDataMap = new OSDMap(); | ||
344 | agentDataMap.Add("AgentID", OSD.FromUUID(groupUpdatePacket.AgentData.AgentID)); | ||
345 | agentData.Add(agentDataMap); | ||
346 | body.Add("AgentData", agentData); | ||
347 | |||
348 | OSDArray groupData = new OSDArray(); | ||
349 | |||
350 | foreach (AgentGroupDataUpdatePacket.GroupDataBlock groupDataBlock in groupUpdatePacket.GroupData) | ||
351 | { | ||
352 | OSDMap groupDataMap = new OSDMap(); | ||
353 | groupDataMap.Add("ListInProfile", OSD.FromBoolean(false)); | ||
354 | groupDataMap.Add("GroupID", OSD.FromUUID(groupDataBlock.GroupID)); | ||
355 | groupDataMap.Add("GroupInsigniaID", OSD.FromUUID(groupDataBlock.GroupInsigniaID)); | ||
356 | groupDataMap.Add("Contribution", OSD.FromInteger(groupDataBlock.Contribution)); | ||
357 | groupDataMap.Add("GroupPowers", OSD.FromBinary(ulongToByteArray(groupDataBlock.GroupPowers))); | ||
358 | groupDataMap.Add("GroupName", OSD.FromString(Utils.BytesToString(groupDataBlock.GroupName))); | ||
359 | groupDataMap.Add("AcceptNotices", OSD.FromBoolean(groupDataBlock.AcceptNotices)); | ||
360 | |||
361 | groupData.Add(groupDataMap); | ||
362 | |||
363 | } | ||
364 | body.Add("GroupData", groupData); | ||
365 | groupUpdate.Add("body", body); | ||
366 | |||
367 | return groupUpdate; | ||
368 | } | ||
369 | |||
370 | public static OSD GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) | 336 | public static OSD GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) |
371 | { | 337 | { |
372 | OSDArray AgentData = new OSDArray(1); | 338 | OSDArray AgentData = new OSDArray(1); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index cc2d1e2..4a48a80 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -2755,44 +2755,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2755 | 2755 | ||
2756 | public void SendGroupMembership(GroupMembershipData[] GroupMembership) | 2756 | public void SendGroupMembership(GroupMembershipData[] GroupMembership) |
2757 | { | 2757 | { |
2758 | m_groupPowers.Clear(); | ||
2759 | 2758 | ||
2760 | AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket(); | 2759 | UpdateGroupMembership(GroupMembership); |
2761 | AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[GroupMembership.Length]; | 2760 | SendAgentGroupDataUpdate(AgentId,GroupMembership); |
2762 | for (int i = 0; i < GroupMembership.Length; i++) | ||
2763 | { | ||
2764 | m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; | ||
2765 | |||
2766 | AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock(); | ||
2767 | Group.AcceptNotices = GroupMembership[i].AcceptNotices; | ||
2768 | Group.Contribution = GroupMembership[i].Contribution; | ||
2769 | Group.GroupID = GroupMembership[i].GroupID; | ||
2770 | Group.GroupInsigniaID = GroupMembership[i].GroupPicture; | ||
2771 | Group.GroupName = Util.StringToBytes256(GroupMembership[i].GroupName); | ||
2772 | Group.GroupPowers = GroupMembership[i].GroupPowers; | ||
2773 | Groups[i] = Group; | ||
2774 | |||
2775 | |||
2776 | } | ||
2777 | Groupupdate.GroupData = Groups; | ||
2778 | Groupupdate.AgentData = new AgentGroupDataUpdatePacket.AgentDataBlock(); | ||
2779 | Groupupdate.AgentData.AgentID = AgentId; | ||
2780 | //OutPacket(Groupupdate, ThrottleOutPacketType.Task); | ||
2781 | |||
2782 | try | ||
2783 | { | ||
2784 | IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>(); | ||
2785 | if (eq != null) | ||
2786 | { | ||
2787 | eq.GroupMembership(Groupupdate, this.AgentId); | ||
2788 | } | ||
2789 | } | ||
2790 | catch (Exception ex) | ||
2791 | { | ||
2792 | m_log.Error("Unable to send group membership data via eventqueue - exception: " + ex.ToString()); | ||
2793 | m_log.Warn("sending group membership data via UDP"); | ||
2794 | OutPacket(Groupupdate, ThrottleOutPacketType.Task); | ||
2795 | } | ||
2796 | } | 2761 | } |
2797 | 2762 | ||
2798 | public void SendPartPhysicsProprieties(ISceneEntity entity) | 2763 | public void SendPartPhysicsProprieties(ISceneEntity entity) |
@@ -3423,41 +3388,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3423 | 3388 | ||
3424 | public void SendAgentGroupDataUpdate(UUID avatarID, GroupMembershipData[] data) | 3389 | public void SendAgentGroupDataUpdate(UUID avatarID, GroupMembershipData[] data) |
3425 | { | 3390 | { |
3391 | if(avatarID != AgentId) | ||
3392 | m_log.Debug("[CLIENT]: SendAgentGroupDataUpdate avatarID != AgentId"); | ||
3393 | |||
3426 | IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>(); | 3394 | IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>(); |
3427 | 3395 | if(eq != null) | |
3428 | // use UDP if no caps | ||
3429 | if (eq == null) | ||
3430 | { | 3396 | { |
3431 | SendGroupMembership(data); | 3397 | eq.GroupMembershipData(avatarID,data); |
3432 | } | 3398 | } |
3433 | 3399 | else | |
3434 | OSDMap llsd = new OSDMap(3); | ||
3435 | OSDArray AgentData = new OSDArray(1); | ||
3436 | OSDMap AgentDataMap = new OSDMap(1); | ||
3437 | AgentDataMap.Add("AgentID", OSD.FromUUID(this.AgentId)); | ||
3438 | AgentDataMap.Add("AvatarID", OSD.FromUUID(avatarID)); | ||
3439 | AgentData.Add(AgentDataMap); | ||
3440 | llsd.Add("AgentData", AgentData); | ||
3441 | OSDArray GroupData = new OSDArray(data.Length); | ||
3442 | OSDArray NewGroupData = new OSDArray(data.Length); | ||
3443 | foreach (GroupMembershipData m in data) | ||
3444 | { | 3400 | { |
3445 | OSDMap GroupDataMap = new OSDMap(6); | 3401 | // use UDP if no caps |
3446 | OSDMap NewGroupDataMap = new OSDMap(1); | 3402 | AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket(); |
3447 | GroupDataMap.Add("GroupPowers", OSD.FromULong(m.GroupPowers)); | 3403 | AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[data.Length]; |
3448 | GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices)); | 3404 | for (int i = 0; i < data.Length; i++) |
3449 | GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle)); | 3405 | { |
3450 | GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID)); | 3406 | AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock(); |
3451 | GroupDataMap.Add("GroupName", OSD.FromString(m.GroupName)); | 3407 | Group.AcceptNotices = data[i].AcceptNotices; |
3452 | GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(m.GroupPicture)); | 3408 | Group.Contribution = data[i].Contribution; |
3453 | NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(m.ListInProfile)); | 3409 | Group.GroupID = data[i].GroupID; |
3454 | GroupData.Add(GroupDataMap); | 3410 | Group.GroupInsigniaID = data[i].GroupPicture; |
3455 | NewGroupData.Add(NewGroupDataMap); | 3411 | Group.GroupName = Util.StringToBytes256(data[i].GroupName); |
3412 | Group.GroupPowers = data[i].GroupPowers; | ||
3413 | Groups[i] = Group; | ||
3414 | } | ||
3415 | Groupupdate.GroupData = Groups; | ||
3416 | Groupupdate.AgentData = new AgentGroupDataUpdatePacket.AgentDataBlock(); | ||
3417 | Groupupdate.AgentData.AgentID = avatarID; | ||
3418 | OutPacket(Groupupdate, ThrottleOutPacketType.Task); | ||
3456 | } | 3419 | } |
3457 | llsd.Add("GroupData", GroupData); | ||
3458 | llsd.Add("NewGroupData", NewGroupData); | ||
3459 | |||
3460 | eq.Enqueue(BuildEvent("AgentGroupDataUpdate", llsd), this.AgentId); | ||
3461 | } | 3420 | } |
3462 | 3421 | ||
3463 | public void SendJoinGroupReply(UUID groupID, bool success) | 3422 | public void SendJoinGroupReply(UUID groupID, bool success) |
@@ -5642,9 +5601,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5642 | if (groupID == ActiveGroupId) | 5601 | if (groupID == ActiveGroupId) |
5643 | return ActiveGroupPowers; | 5602 | return ActiveGroupPowers; |
5644 | 5603 | ||
5645 | if (m_groupPowers.ContainsKey(groupID)) | 5604 | lock(m_groupPowers) |
5646 | return m_groupPowers[groupID]; | 5605 | { |
5647 | 5606 | if (m_groupPowers.ContainsKey(groupID)) | |
5607 | return m_groupPowers[groupID]; | ||
5608 | } | ||
5648 | return 0; | 5609 | return 0; |
5649 | } | 5610 | } |
5650 | 5611 | ||
@@ -11011,7 +10972,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11011 | if (m_GroupsModule != null) | 10972 | if (m_GroupsModule != null) |
11012 | { | 10973 | { |
11013 | m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); | 10974 | m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); |
11014 | m_GroupsModule.SendAgentGroupDataUpdate(this); | ||
11015 | } | 10975 | } |
11016 | return true; | 10976 | return true; |
11017 | 10977 | ||
@@ -11136,11 +11096,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11136 | } | 11096 | } |
11137 | return true; | 11097 | return true; |
11138 | } | 11098 | } |
11099 | |||
11100 | UUID lastGroupProfileRequestID = UUID.Zero; | ||
11101 | double lastGroupProfileRequestTS = Util.GetTimeStampMS(); | ||
11102 | |||
11139 | private bool HandleGroupProfileRequest(IClientAPI sender, Packet Pack) | 11103 | private bool HandleGroupProfileRequest(IClientAPI sender, Packet Pack) |
11140 | { | 11104 | { |
11105 | if(m_GroupsModule == null) | ||
11106 | return true; | ||
11107 | |||
11141 | GroupProfileRequestPacket groupProfileRequest = | 11108 | GroupProfileRequestPacket groupProfileRequest = |
11142 | (GroupProfileRequestPacket)Pack; | 11109 | (GroupProfileRequestPacket)Pack; |
11143 | 11110 | ||
11111 | |||
11144 | #region Packet Session and User Check | 11112 | #region Packet Session and User Check |
11145 | if (m_checkPackets) | 11113 | if (m_checkPackets) |
11146 | { | 11114 | { |
@@ -11150,50 +11118,62 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
11150 | } | 11118 | } |
11151 | #endregion | 11119 | #endregion |
11152 | 11120 | ||
11153 | if (m_GroupsModule != null) | 11121 | UUID grpID = groupProfileRequest.GroupData.GroupID; |
11154 | { | 11122 | double ts = Util.GetTimeStampMS(); |
11155 | GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); | 11123 | if(grpID == lastGroupProfileRequestID && ts - lastGroupProfileRequestTS < 10000) |
11156 | 11124 | return true; | |
11157 | groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock(); | 11125 | |
11158 | groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); | 11126 | lastGroupProfileRequestID = grpID; |
11159 | groupProfileReply.AgentData.AgentID = AgentId; | 11127 | lastGroupProfileRequestTS = ts; |
11160 | 11128 | ||
11161 | GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, | 11129 | GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); |
11162 | groupProfileRequest.GroupData.GroupID); | 11130 | |
11163 | 11131 | groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock(); | |
11164 | groupProfileReply.GroupData.GroupID = d.GroupID; | 11132 | groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); |
11165 | groupProfileReply.GroupData.Name = Util.StringToBytes256(d.Name); | 11133 | groupProfileReply.AgentData.AgentID = AgentId; |
11166 | groupProfileReply.GroupData.Charter = Util.StringToBytes1024(d.Charter); | 11134 | |
11167 | groupProfileReply.GroupData.ShowInList = d.ShowInList; | 11135 | GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, |
11168 | groupProfileReply.GroupData.MemberTitle = Util.StringToBytes256(d.MemberTitle); | 11136 | groupProfileRequest.GroupData.GroupID); |
11169 | groupProfileReply.GroupData.PowersMask = d.PowersMask; | 11137 | |
11170 | groupProfileReply.GroupData.InsigniaID = d.InsigniaID; | 11138 | if(d.GroupID == UUID.Zero) // don't send broken data |
11171 | groupProfileReply.GroupData.FounderID = d.FounderID; | 11139 | return true; |
11172 | groupProfileReply.GroupData.MembershipFee = d.MembershipFee; | 11140 | |
11173 | groupProfileReply.GroupData.OpenEnrollment = d.OpenEnrollment; | 11141 | groupProfileReply.GroupData.GroupID = d.GroupID; |
11174 | groupProfileReply.GroupData.Money = d.Money; | 11142 | groupProfileReply.GroupData.Name = Util.StringToBytes256(d.Name); |
11175 | groupProfileReply.GroupData.GroupMembershipCount = d.GroupMembershipCount; | 11143 | groupProfileReply.GroupData.Charter = Util.StringToBytes1024(d.Charter); |
11176 | groupProfileReply.GroupData.GroupRolesCount = d.GroupRolesCount; | 11144 | groupProfileReply.GroupData.ShowInList = d.ShowInList; |
11177 | groupProfileReply.GroupData.AllowPublish = d.AllowPublish; | 11145 | groupProfileReply.GroupData.MemberTitle = Util.StringToBytes256(d.MemberTitle); |
11178 | groupProfileReply.GroupData.MaturePublish = d.MaturePublish; | 11146 | groupProfileReply.GroupData.PowersMask = d.PowersMask; |
11179 | groupProfileReply.GroupData.OwnerRole = d.OwnerRole; | 11147 | groupProfileReply.GroupData.InsigniaID = d.InsigniaID; |
11180 | 11148 | groupProfileReply.GroupData.FounderID = d.FounderID; | |
11181 | Scene scene = (Scene)m_scene; | 11149 | groupProfileReply.GroupData.MembershipFee = d.MembershipFee; |
11182 | if (scene.Permissions.IsGod(sender.AgentId) && (!sender.IsGroupMember(groupProfileRequest.GroupData.GroupID))) | 11150 | groupProfileReply.GroupData.OpenEnrollment = d.OpenEnrollment; |
11183 | { | 11151 | groupProfileReply.GroupData.Money = d.Money; |
11184 | ScenePresence p; | 11152 | groupProfileReply.GroupData.GroupMembershipCount = d.GroupMembershipCount; |
11185 | if (scene.TryGetScenePresence(sender.AgentId, out p)) | 11153 | groupProfileReply.GroupData.GroupRolesCount = d.GroupRolesCount; |
11154 | groupProfileReply.GroupData.AllowPublish = d.AllowPublish; | ||
11155 | groupProfileReply.GroupData.MaturePublish = d.MaturePublish; | ||
11156 | groupProfileReply.GroupData.OwnerRole = d.OwnerRole; | ||
11157 | |||
11158 | Scene scene = (Scene)m_scene; | ||
11159 | if (scene.Permissions.IsGod(sender.AgentId) && (!sender.IsGroupMember(groupProfileRequest.GroupData.GroupID))) | ||
11160 | { | ||
11161 | ScenePresence p; | ||
11162 | if (scene.TryGetScenePresence(sender.AgentId, out p)) | ||
11163 | { | ||
11164 | if (p.GodLevel >= 200) | ||
11186 | { | 11165 | { |
11187 | if (p.GodLevel >= 200) | 11166 | groupProfileReply.GroupData.OpenEnrollment = true; |
11188 | { | 11167 | groupProfileReply.GroupData.MembershipFee = 0; |
11189 | groupProfileReply.GroupData.OpenEnrollment = true; | ||
11190 | groupProfileReply.GroupData.MembershipFee = 0; | ||
11191 | } | ||
11192 | } | 11168 | } |
11193 | } | 11169 | } |
11194 | |||
11195 | OutPacket(groupProfileReply, ThrottleOutPacketType.Task); | ||
11196 | } | 11170 | } |
11171 | |||
11172 | OutPacket(groupProfileReply, ThrottleOutPacketType.Task); | ||
11173 | |||
11174 | if(grpID == lastGroupProfileRequestID) | ||
11175 | lastGroupProfileRequestTS = Util.GetTimeStampMS() - 7000; | ||
11176 | |||
11197 | return true; | 11177 | return true; |
11198 | } | 11178 | } |
11199 | private bool HandleGroupMembersRequest(IClientAPI sender, Packet Pack) | 11179 | private bool HandleGroupMembersRequest(IClientAPI sender, Packet Pack) |
@@ -12955,23 +12935,57 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12955 | 12935 | ||
12956 | public void RefreshGroupMembership() | 12936 | public void RefreshGroupMembership() |
12957 | { | 12937 | { |
12958 | if (m_GroupsModule != null) | 12938 | lock(m_groupPowers) |
12959 | { | 12939 | { |
12960 | GroupMembershipData[] GroupMembership = | 12940 | if (m_GroupsModule != null) |
12941 | { | ||
12942 | GroupMembershipData[] GroupMembership = | ||
12961 | m_GroupsModule.GetMembershipData(AgentId); | 12943 | m_GroupsModule.GetMembershipData(AgentId); |
12962 | 12944 | ||
12963 | m_groupPowers.Clear(); | 12945 | m_groupPowers.Clear(); |
12964 | 12946 | ||
12965 | if (GroupMembership != null) | 12947 | if (GroupMembership != null) |
12966 | { | ||
12967 | for (int i = 0; i < GroupMembership.Length; i++) | ||
12968 | { | 12948 | { |
12969 | m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; | 12949 | for (int i = 0; i < GroupMembership.Length; i++) |
12950 | { | ||
12951 | m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; | ||
12952 | } | ||
12970 | } | 12953 | } |
12971 | } | 12954 | } |
12972 | } | 12955 | } |
12973 | } | 12956 | } |
12974 | 12957 | ||
12958 | public void UpdateGroupMembership(GroupMembershipData[] data) | ||
12959 | { | ||
12960 | lock(m_groupPowers) | ||
12961 | { | ||
12962 | m_groupPowers.Clear(); | ||
12963 | |||
12964 | if (data != null) | ||
12965 | { | ||
12966 | for (int i = 0; i < data.Length; i++) | ||
12967 | m_groupPowers[data[i].GroupID] = data[i].GroupPowers; | ||
12968 | } | ||
12969 | } | ||
12970 | } | ||
12971 | |||
12972 | public void GroupMembershipRemove(UUID GroupID) | ||
12973 | { | ||
12974 | lock(m_groupPowers) | ||
12975 | { | ||
12976 | if(m_groupPowers.ContainsKey(GroupID)) | ||
12977 | m_groupPowers.Remove(GroupID); | ||
12978 | } | ||
12979 | } | ||
12980 | |||
12981 | public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers) | ||
12982 | { | ||
12983 | lock(m_groupPowers) | ||
12984 | { | ||
12985 | m_groupPowers[GroupID] = GroupPowers; | ||
12986 | } | ||
12987 | } | ||
12988 | |||
12975 | public string Report() | 12989 | public string Report() |
12976 | { | 12990 | { |
12977 | return m_udpClient.GetStats(); | 12991 | return m_udpClient.GetStats(); |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 8c1a628..06900f0 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -1302,7 +1302,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1302 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1302 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1303 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1303 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1304 | 1304 | ||
1305 | if ((newPoint.X > 257f || newPoint.X < -1f || newPoint.Y > 257f || newPoint.Y < -1f)) | 1305 | |
1306 | // allow outide region?? | ||
1307 | if (newPoint.X < -1f || newPoint.Y < -1f) | ||
1308 | return true; | ||
1309 | if (newPoint.X > scene.RegionInfo.RegionSizeX + 1.0f || newPoint.Y > scene.RegionInfo.RegionSizeY + 1.0f) | ||
1306 | { | 1310 | { |
1307 | return true; | 1311 | return true; |
1308 | } | 1312 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs index f4014db..4361310 100644 --- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs +++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs | |||
@@ -58,7 +58,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
58 | void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat, | 58 | void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat, |
59 | bool isModerator, bool textMute); | 59 | bool isModerator, bool textMute); |
60 | void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID); | 60 | void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID); |
61 | void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID); | ||
62 | void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data); | 61 | void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data); |
63 | OSD ScriptRunningEvent(UUID objectID, UUID itemID, bool running, bool mono); | 62 | OSD ScriptRunningEvent(UUID objectID, UUID itemID, bool running, bool mono); |
64 | OSD BuildEvent(string eventName, OSD eventBody); | 63 | OSD BuildEvent(string eventName, OSD eventBody); |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a75b460..0d19e94 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -250,6 +250,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
250 | /// | 250 | /// |
251 | public int m_linksetPhysCapacity = 0; | 251 | public int m_linksetPhysCapacity = 0; |
252 | 252 | ||
253 | /// <summary> | ||
254 | /// When placed outside the region's border, do we transfer the objects or | ||
255 | /// do we keep simulating them here? | ||
256 | /// </summary> | ||
257 | public bool DisableObjectTransfer { get; set; } | ||
258 | |||
253 | public bool m_useFlySlow; | 259 | public bool m_useFlySlow; |
254 | public bool m_useTrashOnDelete = true; | 260 | public bool m_useTrashOnDelete = true; |
255 | 261 | ||
@@ -1155,6 +1161,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1155 | if (entityTransferConfig != null) | 1161 | if (entityTransferConfig != null) |
1156 | { | 1162 | { |
1157 | AllowAvatarCrossing = entityTransferConfig.GetBoolean("AllowAvatarCrossing", AllowAvatarCrossing); | 1163 | AllowAvatarCrossing = entityTransferConfig.GetBoolean("AllowAvatarCrossing", AllowAvatarCrossing); |
1164 | DisableObjectTransfer = entityTransferConfig.GetBoolean("DisableObjectTransfer", false); | ||
1158 | } | 1165 | } |
1159 | 1166 | ||
1160 | #region Interest Management | 1167 | #region Interest Management |
@@ -4309,14 +4316,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
4309 | if (banned || restricted) | 4316 | if (banned || restricted) |
4310 | { | 4317 | { |
4311 | ILandObject nearestParcel = GetNearestAllowedParcel(agentID, posX, posY); | 4318 | ILandObject nearestParcel = GetNearestAllowedParcel(agentID, posX, posY); |
4319 | Vector2? newPosition = null; | ||
4312 | if (nearestParcel != null) | 4320 | if (nearestParcel != null) |
4313 | { | 4321 | { |
4314 | //Move agent to nearest allowed | 4322 | //Move agent to nearest allowed |
4315 | Vector2 newPosition = GetParcelSafeCorner(nearestParcel); | 4323 | // Vector2 newPosition = GetParcelSafeCorner(nearestParcel); |
4316 | posX = newPosition.X; | 4324 | newPosition = nearestParcel.GetNearestPoint(new Vector3(posX, posY,0)); |
4317 | posY = newPosition.Y; | ||
4318 | } | 4325 | } |
4319 | else | 4326 | if(newPosition == null) |
4320 | { | 4327 | { |
4321 | if (banned) | 4328 | if (banned) |
4322 | { | 4329 | { |
@@ -4329,6 +4336,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
4329 | } | 4336 | } |
4330 | return false; | 4337 | return false; |
4331 | } | 4338 | } |
4339 | else | ||
4340 | { | ||
4341 | posX = newPosition.Value.X; | ||
4342 | posY = newPosition.Value.Y; | ||
4343 | } | ||
4332 | } | 4344 | } |
4333 | reason = ""; | 4345 | reason = ""; |
4334 | return true; | 4346 | return true; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index f9f795f..90ee1d1 100755 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -242,6 +242,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
242 | coarseLocations = new List<Vector3>(); | 242 | coarseLocations = new List<Vector3>(); |
243 | avatarUUIDs = new List<UUID>(); | 243 | avatarUUIDs = new List<UUID>(); |
244 | 244 | ||
245 | // coarse locations are sent as BYTE, so limited to the 255m max of normal regions | ||
246 | // try to work around that scale down X and Y acording to region size, so reducing the resolution | ||
247 | // | ||
248 | // viewers need to scale up | ||
249 | float scaleX = m_parentScene.RegionInfo.RegionSizeX / Constants.RegionSize; | ||
250 | if (scaleX == 0) | ||
251 | scaleX = 1.0f; | ||
252 | scaleX = 1.0f / scaleX; | ||
253 | float scaleY = m_parentScene.RegionInfo.RegionSizeY / Constants.RegionSize; | ||
254 | if (scaleY == 0) | ||
255 | scaleY = 1.0f; | ||
256 | scaleY = 1.0f / scaleY; | ||
257 | |||
245 | List<ScenePresence> presences = GetScenePresences(); | 258 | List<ScenePresence> presences = GetScenePresences(); |
246 | for (int i = 0; i < Math.Min(presences.Count, maxLocations); ++i) | 259 | for (int i = 0; i < Math.Min(presences.Count, maxLocations); ++i) |
247 | { | 260 | { |
@@ -250,9 +263,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
250 | // If this presence is a child agent, we don't want its coarse locations | 263 | // If this presence is a child agent, we don't want its coarse locations |
251 | if (sp.IsChildAgent) | 264 | if (sp.IsChildAgent) |
252 | continue; | 265 | continue; |
266 | Vector3 pos = sp.AbsolutePosition; | ||
267 | pos.X *= scaleX; | ||
268 | pos.Y *= scaleY; | ||
253 | 269 | ||
254 | coarseLocations.Add(sp.AbsolutePosition); | 270 | coarseLocations.Add(pos); |
255 | |||
256 | avatarUUIDs.Add(sp.UUID); | 271 | avatarUUIDs.Add(sp.UUID); |
257 | } | 272 | } |
258 | } | 273 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index e226196..cb1bf55 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -556,6 +556,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
556 | && !Scene.PositionIsInCurrentRegion(val) | 556 | && !Scene.PositionIsInCurrentRegion(val) |
557 | && !IsAttachmentCheckFull() | 557 | && !IsAttachmentCheckFull() |
558 | && !Scene.LoadingPrims | 558 | && !Scene.LoadingPrims |
559 | && !Scene.DisableObjectTransfer | ||
559 | ) | 560 | ) |
560 | { | 561 | { |
561 | if (!inTransit) | 562 | if (!inTransit) |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index f19cd47..f34dbe8 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -1626,6 +1626,22 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
1626 | 1626 | ||
1627 | } | 1627 | } |
1628 | 1628 | ||
1629 | public void UpdateGroupMembership(GroupMembershipData[] data) | ||
1630 | { | ||
1631 | |||
1632 | } | ||
1633 | |||
1634 | public void GroupMembershipRemove(UUID GroupID) | ||
1635 | { | ||
1636 | |||
1637 | } | ||
1638 | |||
1639 | public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers) | ||
1640 | { | ||
1641 | |||
1642 | } | ||
1643 | |||
1644 | |||
1629 | public void SendAvatarNotesReply(UUID targetID, string text) | 1645 | public void SendAvatarNotesReply(UUID targetID, string text) |
1630 | { | 1646 | { |
1631 | 1647 | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index ec34e39..ddeac66 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -786,7 +786,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
786 | 786 | ||
787 | GroupProfileData profile = new GroupProfileData(); | 787 | GroupProfileData profile = new GroupProfileData(); |
788 | 788 | ||
789 | |||
790 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null); | 789 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null); |
791 | if (groupInfo != null) | 790 | if (groupInfo != null) |
792 | { | 791 | { |
@@ -812,7 +811,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
812 | profile.MemberTitle = memberInfo.GroupTitle; | 811 | profile.MemberTitle = memberInfo.GroupTitle; |
813 | profile.PowersMask = memberInfo.GroupPowers; | 812 | profile.PowersMask = memberInfo.GroupPowers; |
814 | } | 813 | } |
815 | 814 | /* | |
815 | this should save xmlrpc calls, but seems to return wrong GroupMembershipCount and GroupRolesCount | ||
816 | UUID agent = GetRequestingAgentID(remoteClient); | ||
817 | GroupProfileData profile = m_groupData.GetMemberGroupProfile(agent, groupID, agent); | ||
818 | */ | ||
816 | return profile; | 819 | return profile; |
817 | } | 820 | } |
818 | 821 | ||
@@ -1407,13 +1410,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1407 | SendDataUpdate(remoteClient, tellOthers); | 1410 | SendDataUpdate(remoteClient, tellOthers); |
1408 | 1411 | ||
1409 | GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID); | 1412 | GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID); |
1410 | IEventQueue eq = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); | 1413 | remoteClient.UpdateGroupMembership(membershipArray); |
1411 | if (eq != null) | ||
1412 | eq.GroupMembershipData(agentID, membershipArray); | ||
1413 | else | ||
1414 | remoteClient.SendGroupMembership(membershipArray); | ||
1415 | 1414 | ||
1416 | remoteClient.RefreshGroupMembership(); | 1415 | remoteClient.SendAgentGroupDataUpdate(agentID, membershipArray); |
1417 | } | 1416 | } |
1418 | 1417 | ||
1419 | /// <summary> | 1418 | /// <summary> |
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs index 6b5b40a..cff3212 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs | |||
@@ -51,7 +51,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
51 | /// GroupID may be specified instead, in which case this parmeter will be null. | 51 | /// GroupID may be specified instead, in which case this parmeter will be null. |
52 | /// </param> | 52 | /// </param> |
53 | GroupRecord GetGroupRecord(UUID RequestingAgentID, UUID GroupID, string GroupName); | 53 | GroupRecord GetGroupRecord(UUID RequestingAgentID, UUID GroupID, string GroupName); |
54 | 54 | GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID); | |
55 | |||
55 | List<DirGroupsReplyData> FindGroups(UUID RequestingAgentID, string search); | 56 | List<DirGroupsReplyData> FindGroups(UUID RequestingAgentID, string search); |
56 | List<GroupMembersData> GetGroupMembers(UUID RequestingAgentID, UUID GroupID); | 57 | List<GroupMembersData> GetGroupMembers(UUID RequestingAgentID, UUID GroupID); |
57 | 58 | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs index acb37f6..2dda3a1 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs | |||
@@ -181,9 +181,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
181 | 181 | ||
182 | m_cacheTimeout = groupsConfig.GetInt("GroupsCacheTimeout", 30); | 182 | m_cacheTimeout = groupsConfig.GetInt("GroupsCacheTimeout", 30); |
183 | 183 | ||
184 | // disable cache until it is fixed | ||
185 | m_cacheTimeout = 0; | ||
186 | |||
187 | if (m_cacheTimeout == 0) | 184 | if (m_cacheTimeout == 0) |
188 | { | 185 | { |
189 | m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Disabled."); | 186 | m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Disabled."); |
@@ -385,10 +382,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
385 | 382 | ||
386 | GroupMembershipData MemberInfo = GetAgentGroupMembership(requestingAgentID, AgentID, GroupID); | 383 | GroupMembershipData MemberInfo = GetAgentGroupMembership(requestingAgentID, AgentID, GroupID); |
387 | GroupProfileData MemberGroupProfile = GroupProfileHashtableToGroupProfileData(respData); | 384 | GroupProfileData MemberGroupProfile = GroupProfileHashtableToGroupProfileData(respData); |
388 | 385 | if(MemberInfo != null) | |
389 | MemberGroupProfile.MemberTitle = MemberInfo.GroupTitle; | 386 | { |
390 | MemberGroupProfile.PowersMask = MemberInfo.GroupPowers; | 387 | MemberGroupProfile.MemberTitle = MemberInfo.GroupTitle; |
391 | 388 | MemberGroupProfile.PowersMask = MemberInfo.GroupPowers; | |
389 | } | ||
392 | return MemberGroupProfile; | 390 | return MemberGroupProfile; |
393 | } | 391 | } |
394 | 392 | ||
@@ -977,12 +975,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
977 | 975 | ||
978 | try | 976 | try |
979 | { | 977 | { |
980 | resp = req.Send(m_groupsServerURI, 30000); | 978 | resp = req.Send(m_groupsServerURI); |
981 | |||
982 | if ((m_cacheTimeout > 0) && (CacheKey != null)) | ||
983 | { | ||
984 | m_memoryCache.AddOrUpdate(CacheKey, resp, TimeSpan.FromSeconds(m_cacheTimeout)); | ||
985 | } | ||
986 | } | 979 | } |
987 | catch (Exception e) | 980 | catch (Exception e) |
988 | { | 981 | { |
@@ -1004,12 +997,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1004 | m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: {0} :: {1}", key, param[key].ToString()); | 997 | m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: {0} :: {1}", key, param[key].ToString()); |
1005 | } | 998 | } |
1006 | } | 999 | } |
1000 | |||
1001 | if ((m_cacheTimeout > 0) && (CacheKey != null)) | ||
1002 | { | ||
1003 | m_memoryCache.AddOrUpdate(CacheKey, resp, 10.0); | ||
1004 | } | ||
1007 | Hashtable respData = new Hashtable(); | 1005 | Hashtable respData = new Hashtable(); |
1008 | respData.Add("error", e.ToString()); | 1006 | respData.Add("error", e.ToString()); |
1009 | return respData; | 1007 | return respData; |
1010 | } | 1008 | } |
1011 | } | 1009 | } |
1012 | 1010 | ||
1011 | if ((m_cacheTimeout > 0) && (CacheKey != null)) | ||
1012 | { | ||
1013 | m_memoryCache.AddOrUpdate(CacheKey, resp, TimeSpan.FromSeconds(m_cacheTimeout)); | ||
1014 | } | ||
1015 | |||
1013 | if (resp.Value is Hashtable) | 1016 | if (resp.Value is Hashtable) |
1014 | { | 1017 | { |
1015 | Hashtable respData = (Hashtable)resp.Value; | 1018 | Hashtable respData = (Hashtable)resp.Value; |
@@ -1138,6 +1141,7 @@ namespace Nwc.XmlRpc | |||
1138 | request.ContentType = "text/xml"; | 1141 | request.ContentType = "text/xml"; |
1139 | request.AllowWriteStreamBuffering = true; | 1142 | request.AllowWriteStreamBuffering = true; |
1140 | request.KeepAlive = !_disableKeepAlive; | 1143 | request.KeepAlive = !_disableKeepAlive; |
1144 | request.Timeout = 30000; | ||
1141 | 1145 | ||
1142 | using (Stream stream = request.GetRequestStream()) | 1146 | using (Stream stream = request.GetRequestStream()) |
1143 | { | 1147 | { |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 43b4e02..bdac6aa 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -1255,6 +1255,18 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
1255 | { | 1255 | { |
1256 | } | 1256 | } |
1257 | 1257 | ||
1258 | public void UpdateGroupMembership(GroupMembershipData[] data) | ||
1259 | { | ||
1260 | } | ||
1261 | |||
1262 | public void GroupMembershipRemove(UUID GroupID) | ||
1263 | { | ||
1264 | } | ||
1265 | |||
1266 | public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers) | ||
1267 | { | ||
1268 | } | ||
1269 | |||
1258 | public void SendUseCachedMuteList() | 1270 | public void SendUseCachedMuteList() |
1259 | { | 1271 | { |
1260 | } | 1272 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 32b3bb7..064eb0a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2680,7 +2680,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2680 | if (part.ParentGroup.RootPart == part) | 2680 | if (part.ParentGroup.RootPart == part) |
2681 | { | 2681 | { |
2682 | SceneObjectGroup parent = part.ParentGroup; | 2682 | SceneObjectGroup parent = part.ParentGroup; |
2683 | if (!World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos)) | 2683 | if (!parent.IsAttachment && !World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos)) |
2684 | return; | 2684 | return; |
2685 | parent.UpdateGroupPosition((Vector3)toPos); | 2685 | parent.UpdateGroupPosition((Vector3)toPos); |
2686 | } | 2686 | } |